1、配置基礎
慣例配置->應用配置->模塊配置->動態配置
- 慣例配置:核心框架內置的配置文件,無需更改。
- 應用配置:每個應用的全局配置文件(框架安裝后會生成初始的應用配置文件),有部分配置參數僅能在應用配置文件中設置。
- 模塊配置:每個模塊的配置文件(相同的配置參數會覆蓋應用配置),有部分配置參數模塊配置是無效的,因為已經使用過。
- 動態配置:主要是指在控制器或者行為中進行(動態)更改配置,該配置方式只在當次請求有效,因為不會保存到配置文件中。
只能應用配置中設置參數如下:
配置參數 | 描述 |
---|---|
app_debug | 應用調試模式(支持環境變量配置) |
app_trace | 應用trace(支持環境變量配置) |
class_suffix | 類后綴 |
default_filter | 默認過濾機制 |
root_namespace | 根命名空間 |
pathinfo_depr | PATH_INFO分隔符 |
url_route_must | 路由強制模式 |
auto_bind_module | 自動綁定模塊 |
default_lang | 默認語言 |
lang_switch_on | 多語言切換 |
只能環境變量中修改的參數如下:
配置參數 | 描述 |
---|---|
app_namespace | 應用命名空間 |
config_ext | 配置文件后綴 |
2、架構總覽
- 入口文件
- 應用
- 路由
- 模塊
- 控制器
- 操作(方法)
- 模型
- 視圖
- 板引擎
- 驅動
- 行為
- 中間件
- 事件
- 助手函數
3、環境變量
5.1版本取消了所有的系統常量,原來的系統路徑變量改為使用Env
類獲取(需要引入think\facade\Env
):
// 獲取應用目錄(不區分大小寫)
echo Env::get('app_path');
// 或者
echo Env::get('APP_PATH');
支持獲取的系統路徑變量包括:
系統路徑 | Env參數名稱 |
---|---|
應用根目錄 | root_path |
應用目錄 | app_path |
框架目錄 | think_path |
配置目錄 | config_path |
擴展目錄 | extend_path |
composer目錄 | vendor_path |
運行緩存目錄 | runtime_path |
路由目錄 | route_path |
當前模塊目錄 | module_path |
系統路徑 | Env參數名稱 |
應用根目錄 | root_path |
應用目錄 | app_path |
框架目錄 | think_path |
配置目錄 | config_path |
擴展目錄 | extend_path |
composer目錄 | vendor_path |
運行緩存目錄 | runtime_path |
路由目錄 | route_path |
當前模塊目錄 | module_path |
4、命名空間
特別注意的是,如果你需要調用PHP內置的類庫,或者第三方沒有使用命名空間的類庫,記得在實例化類庫的時候加上 \
,例如:
// 錯誤的用法
$class = new stdClass();
$xml = new SimpleXmlElement($xmlstr);
// 正確的用法
$class = new \stdClass();
$xml = new \SimpleXmlElement($xmlstr);
從ThinkPHP5.0
開始,遵循PSR-4
自動加載規范,只需要給類庫正確定義所在的命名空間,并且命名空間的路徑與類庫文件的目錄一致,那么就可以實現類的自動加載,從而實現真正的惰性加載。
例如,\think\cache\driver\File
類的定義為:
namespace think\cache\driver;class File
{
}
如果我們實例化該類的話,應該是:
$class = new \think\cache\driver\File();
系統會自動加載該類對應路徑的類文件,其所在的路徑是 thinkphp/library/think/cache/driver/File.php
。
注:5.1
版本默認的目錄規范是小寫,類文件命名是駝峰法,并且首字母大寫。
5、容器和依賴注入
依賴注入其實本質上是指對類的依賴通過構造器完成自動注入,例如在控制器架構方法和操作方法中一旦對參數進行對象類型約束則會自動觸發依賴注入,由于訪問控制器的參數都來自于URL請求,普通變量就是通過參數綁定自動獲取,對象變量則是通過依賴注入生成。其實就是java的對象參數,這個概念豪頭太大,又不好記。
<?php
namespace app\index\controller;use app\index\model\User;class Index
{protected $user;public function __construct(User $user){$this->user = $user;}public function hello(){return 'Hello,' . $this->user->name . '!';}
}
系統內置綁定到容器中的類庫包括:
系統類庫 | 容器綁定標識 |
---|---|
think\Build | build |
think\Cache | cache |