-
響應對象:
????可在方法名中帶一個參數:type
????方法中判斷請求類型:
????if(!is_array($type,['json','jsonp','xml'])){$type = 'json';}
????Config::set('default_return_type',$type);
查看全部 -
request類input函數調用:
????文件中引入think\Request;
????在方法中引入,如:public function index(Request $request)
????可調用? 有:get、post、put、patch、delete、param、request、session、cookie、server、env、path、file
????操作:
????調用模式:$request->參數類型(key名,key值,函數名);
????$request->session('email','[email protected]','trim');
????input('patch.sid');
查看全部 -
#獲取瀏覽器輸入框的值
? ? ? ? dump($request->domain());
? ? ? ? dump($request->pathinfo());
? ? ? ? dump($request->path());
? ? ? ? #請求類型
? ? ? ? dump($request->method());
? ? ? ? dump($request->isGet());
? ? ? ? dump($request->isPost());
? ? ? ? dump($request->isAjax());
? ? ? ??
? ? ? ? #獲取請求的參數
? ? ? ? dump($request->get());
? ? ? ? dump($request->param());
? ? ? ? dump($request->post());
? ? ? ? //session('name','sunxiaopeng');
? ? ? ? dump($request->session());
? ? ? ? cookie('email','[email protected]');
? ? ? ? dump($request->cookie());
? ? ? ??
? ? ? ? dump($request->param('type'));
? ? ? ? dump($request->cookie('email'));
? ? ? ??
? ? ? ? #獲取模塊 控制器 和操作
? ? ? ? dump($request->module());
? ? ? ? dump($request->controller());
? ? ? ? dump($request->action());
? ? ? ??
? ? ? ? dump($request->url());
? ? ? ? dump($request->baseUrl());
查看全部 -
tp是一個單入口框架,所有請求都進入index.php入口文件;我們通過index.php來接受所有http請求(即用戶請求),請求中的所有參數,我們都可以通過Request這個對象接受和處理;
獲取請求對象的三種方式:
1、助手函數
$request = request( );
dump($request);//即可打印出請求的對象
2、使用think下的request類獲取實例(單例模式))
需要先加載request命名空間
use think\Request;()
public function index( ){
? $request = Request::instance( );
dump($request);即可打印出請求的對象
}
3、直接注入到方法(建議使用)
需要先加載request命名空間
use think\Request;
在方法中傳入request對象參數 如下:
public function index(Request ?$request){
? ?dump($request);
}
單例模式,是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類一個類只有一個實例。即一個類只有一個對象實例;比如Config類,Config::get('key'); Request類,Request::instance( );等等,框架中各自只有這一個類;
并且單例模式那個類只需要實例化一次,在整個框架下都可以直接使用了查看全部 -
路由:url簡化
步驟:
1.先在應用配置文件中定義
conf/config.php配置里設置
// 是否開啟路由
'url_route_on' ?=> true,
// 是否強制使用路由,當開啟強制路由,一定要用路由,值為true即為開啟
'url_route_must'=> false
2.然后再conf文件夾下新建自定義路由文件route.php(文件名稱必須為route.php)
? 在里面定義規則:
? return ['news/:id' =>'Index/index/index'];
? 這時訪問index模塊下的index控制器下的index方法,并傳參數id時,就可以這樣localhost/news/5訪問就可以
? url()助手函數,當采用路由時,可將頁面上的默認訪問URL改為路由訪問URL。
? ?即echo url('index/index/index',['id' => 10]);打印出來的結果是 localhost/news/10
? ?
? ?
? ?tp5路由
? 1.這里所說的路由是tp5才引入的路由概念
? 2.如何在tp5中使用路由
? ? a.通過配置url_route_on參數(默認為開啟),在config.php同級目錄下創建route.php文件配置路由規則,如圖所述
? ? b.通過配置url_route_must參數,如果強制開啟路由后,那么tp中通過path_info訪問的url規則將失效,所有操作的訪問都需要在route.php中配置
查看全部 -
入口文件綁定
就是說,通過在入口文件(index.php)里設置
define('BIND_MODULE','admin');//定義此常量,綁定admin模塊,這時整個項目,只能訪問admin這個模塊
define('BIND_MODULE','admin/index');//綁定admin模塊下的index控制器(只允許訪問admin模塊下的index控制器)
define('BIND_MODULE','admin/index/index');//綁定admin模塊下的index控制器下的index方法(只允許訪問admin模塊下的index控制器下的index方法)
可以使用戶在訪問網站時,只能訪問指定模塊下的控制器,或者只能訪問指定模塊下的指定控制器下的指定方法;
這個功能存在的意義?
當我們的項目在給第三方對接時,就可以重新定義一個入口文件(比如叫api.php),原本默認的入口文件是index.php依然存在,index.php這個入口文件是供正常用戶訪問項目的入口文件;
通過定義一個新的入口文件來限制第三方訪問的模塊(比如叫api.php);并且第三方只能通過api.php這個入口文件訪問,才能得到他們想要的數據,同時我們一般把第三方想要的數據單獨放在一個模塊(比如api模塊);
這時可以在api.php里面設置,只允許第三方訪問指定模塊,或者指定方法;其他模塊或者其他方法不允許其訪問;
在public下可創建多個入口文件,可實現不同入口文件訪問不同模塊。入口文件名與模塊文件必須相同,自動訪問與之對應的模塊。
這時需要在在conf->config.php 里配置自動綁定 "auto_bind_module" ?=> true ?
相當于public下api.php文件define("BIND_MODULE","api");
注意新建的入口文件里面的一些內容是默認的:
<?php
// 定義應用目錄
define('APP_PATH', __DIR__ . '/../app/');
define('CONF_PATH', __DIR__ . '/../conf/');
// 加載框架引導文件
require (__DIR__ . '/../thinkphp/start.php');
?>
查看全部 -
1、綁定模塊:
1 define(
'BIND_MODULE'
,
'admin'
);
如果是這樣綁定的,那訪問admin模塊時只需要加上控制器名和方法名:
如: http://localhost/index/index?
或是?http://localhost/user/index?
這種是只綁定模塊名,可以訪問模塊下的所有控制器
1 define(
'BIND_MODULE'
,
'admin/index'
);
若是這種方式綁定了? 模塊名/控制器名? 那訪問時只可以訪問這個控制器的方法,不可以訪問其它控制器的方法
如:?http://localhost/這種表示訪問?admin模塊下的index控制器下的index方法
http://localhost/demo 訪問admin模塊下的index控制器下的demo方法
http://localhost/user/index 表示訪問 admin模塊下的user控制器下的index方法,這種方式就不能訪問了
2、大型項目時就不在這里設置 BIND_MODULE 的綁定了
那就要新建一個入口文件了。比如第三方接口文件操作
那就要新建 public/api.php文件 ,然后再開啟入口文件自動綁定,即? 訪問api.php文件時自動訪問 app/api/controller/Index.php文件。
查看全部 -
在入口文件中可以進行以下操作: 1.必須引入thinkphp框架的引導文件(它可以幫助過濾些網站的安全、檢測的問題) 2.可以在這里定義在thinkphp/base.php中有的一些常量,如應用目錄常量、配置文件目錄常量等。沒定義的話則會使用base.php中的默認值。
查看全部 -
1.什么是環境變量
tp除了加載項目配置config.php,還會去加載一個可能存在的 env.php ,位于項目根目錄下,也就是跟composer.json同級。
有點類似于場景配置,就是說在不同的情況下,項目對配置的要求會有所不同,比如項目的開發環境、預上線環境、測試環境、生產環境等等對配置的要求都不同;這個時候我們就要切換到相應的配置;
2.方法步驟:
? ? ?a.在和app文件夾同級目錄下,新建".env"或者env.php這個文件;
? ? ? env.php格式和配置文件一樣,返回一個數組,例如:
? ? ? ? ? ? ?<?php
? ? ? ? ? ? return [
? ? ? ? ? ? 'app_debug' =>false
? ? ? ? ? ? ? ? ? ?];
? ? ? ? ? ? ??>
如果是新建的文件格式是.env,里面就不用<?php?>標識符了;直接書寫 ?'app_debug' =>false這樣就行;
通過以上方式就算是初步把env配置設置好了,下面步驟就是開始使用env里面的配置了;
b.接下來我們要掌握怎么獲取到.env文件里面的配置了;
例:我們在.env文件里書寫了status=dev,接下來我們在conf文件下的config.php里面來獲取這個設置:
在config.php文件里與環境變量相關的都從.env配置文件中獲取值
<?php
use think\Env;//注意這里別忘了寫
return [
//tp5提供了一個慣例參數app_status,只需要改變它的值就能實現一鍵切換運行環境
'app_status' => Env::get('status','dev');
];
使用Env::get()方法獲取配置的參數值;(或者$_ENV['a'])對于組參數需要這樣使用Env::get(database.user);
同時系統也會自帶環境變量;查看所有環境變量的方式dump($_ENV);
3.env.php優先級:高于config.php;就是說.env里的設置會覆蓋config.php里的配置;
查看全部 -
.env文件寫法
查看全部 -
config類和助手函數config();主要功能獲取和設置配置的兩種方法
tp5的全局config()函數;
? 1.實現的原理
? ? a.config()函數的所有功能來源于thinkphp框架目錄下library目錄下的think目錄下的config.php類提供的方法
? ? b.通過thinkphp框架目錄下的helper.php文件定義了一個全局的function config()方法,根據傳參調用config.php類中不同的方法實現不同的功能,注意Config是首字母大寫,因為tp5中所有類首字母都是大寫
? 2.config()函數的使用
? ? a.可以在項目任何地方調用
? ? b.因為不能確保在helper.php文件定義全局function config()方法之前是否已經定義了,所以在項目中建議使用config.php中的類方法操作整個框架的配置參數
? ? c.項目文件中通過 use think\config 引入類方法,因為是靜態類,所以通過 Config::get() 可以獲取所有配置的參數
? ? 獲取配置參數的值:Config::get('key'); ? ?等價于 ? config('key');
? ? 設置配置參數的值:Config::set('key', 'value'); ? 等價于 ? config('key', 'value');
? ? 設置配置參數的作用域:Config::set('key', 'value', '作用域'); ? 等價于 ? Config('key','value','作用域');
? ? 檢測配置參數是否存在:Config::has('key'); ?等價于 ? Config('?key');
? ? 注意:參數不存在或者值為null,var_dump時都返回false;例:key=null; $a=Config::has('key'); var_dump($a);則返回false;
? ??
設置配置時,注意所設置的配置的服務作用域;
例:Config::set('key', 'value', 'index');設置配置的作用域是服務index模塊的,那么獲取的時候也要加上作用域
Config::get('key','index');
查看全部 -
1、public function __construct(){} 在類文件中執行下面任何方法前都會用執行這個方法。
在這方法中直接用助手函數。
運行結果為
如果只在方法里動態配置應用項,那只有這個方法才可以使用,同文件的其它方法是不能使用的。如:
查看全部 -
模塊配置:專門為單個模塊提供配置服務,之前的擴展配置和場景配置都是相對整個項目應用級別的,而模塊配置是相對模塊級別,作用域不同
在conf文件夾下新建文件夾,文件夾的名字和相應的模塊名字必須一致,例如在conf文件夾下新建文件夾的名為index,則這個文件夾下的所有配置只對index這個模塊生效;
1.在conf目錄下index文件夾下新建config.php文件來進行對單個模塊的配置進行設置,注意這個文件名必須為config.php;
2.conf目錄下index文件夾下也可以通過創建extra目錄來擴展配置;
|conf配置的作用域是整個項目應用
|模塊配置作用域只對相應單個模塊生效;
查看全部 -
配置文件執行順序 conf/extra/database.php > conf/database.php > thinkphp/convention.php
在不同的環境中使用不同的配置文件叫場景配置
在conf/config.php文件中加多一項:
home場景時就加conf/home.php文件,office環境就加一個conf/offic.php文件,下面的值也改成offic
'app_status' => 'home',
home場景時就在conf里加一個home文件
場景配置文件 conf/home.php可以跟conf/config.php文件執行array_merge()操作
database會替換掉全部,所以需要全部復制。tp5的bug
查看全部 -
extra->擴展配置
config.php->應用配置
database.php->數據庫的默認配置
extra里面的database為擴展配置可以替換掉數據庫的默認配置convention下的database
database.php可以跟extra同級目錄,而且可以替換掉應用配置config.php里面的database
優先級:擴展配置>應用配置>默認配置
查看全部
舉報