ThinkPHP5 ---基礎(chǔ)篇(配置)
一扰柠、慣例配置
i. 定義配置文件 public/index.php
|
//定義配置文件目錄
define('CONF_PATH', DIR . '/../conf/') ;
|
ii. 在application同級(jí)新建目錄conf
iii. 打印當(dāng)前配置 dump(config()) ;
iv. 上述打印出來(lái)的內(nèi)容 即為thinkphp/convention.php 的內(nèi)容
二粉铐、應(yīng)用配置
i. 上述慣例配置是thinkphp框架提供的 應(yīng)用于整個(gè)框架的默認(rèn)配置 一般開發(fā)過程中 對(duì)慣例配置不做修改 防止后期的更新 維護(hù) 框架升級(jí)受到影響
ii. 應(yīng)用配置只對(duì)整個(gè)應(yīng)用有效 當(dāng)前應(yīng)用下的所有模塊
iii. 與application同級(jí)新建 conf/config.php
config.php定義之前打印的配置信息:
config.php定義之后打印的配置信息:
說(shuō)明 配置生效
iv. 原理: array_merge()
- index函數(shù)中打印出array_merge后的結(jié)果
同理:慣例配置(thinkphp/convention.php)相當(dāng)于 $arr1
應(yīng)用配置(conf/config.php)相當(dāng)于$arr2
Thinkphp對(duì)于多維數(shù)組 分區(qū)域的merge操作 相同的key 后面的值將之前的替換(覆蓋)
三、擴(kuò)展配置
i. 上述 可以通過應(yīng)用配置 改變默認(rèn)配置 通過應(yīng)配配置 可以滿足完成開發(fā)的需求
ii. 擴(kuò)展配置:實(shí)際項(xiàng)目開發(fā)中 配置項(xiàng)很多 緩存配置 session配置 cookie配置 若集中在一個(gè)文件中配置 文件過大 不易維護(hù) 拆分成多個(gè)文件以便于維護(hù)
iii. 在conf目錄下新建extra目錄 (conf/extra) 新建配置文件測(cè)試
- 如 新建文件email.php (conf/extra/email.php)
- 打印配置
- 特例 database (數(shù)據(jù)庫(kù)的配置)
a) 正常思路: conf/extra/database.php
b) 打印 配置生效
但是:實(shí)際開發(fā)中 如果項(xiàng)目不是特別大 或者說(shuō)配置項(xiàng)不是特別多 多數(shù)使用默認(rèn)配置 就不需要建立擴(kuò)展配置
幾乎所有的項(xiàng)目都需要連接數(shù)據(jù)庫(kù)操作 thinkphp允許我們將 database.php放在conf目錄下
新建配置文件 conf/database.php
打印 配置生效
c) 此處 出現(xiàn)一個(gè)配置生效優(yōu)先級(jí)的問題
慣例配置thinkphp/convention.php 有數(shù)據(jù)庫(kù)的配置信息
應(yīng)用配置 conf/config.php 有數(shù)據(jù)庫(kù)的配置信息
擴(kuò)展配置中 database.php 也有數(shù)據(jù)庫(kù)的配置信息
經(jīng)過多次merge操作 相同的key 應(yīng)用配置中的值覆蓋 慣例配置 擴(kuò)展配置覆蓋 應(yīng)用配置
類似于就近原則
優(yōu)先級(jí)(高->低) 擴(kuò)展配置>應(yīng)用配置>慣例(默認(rèn))配置
四耻矮、場(chǎng)景配置
i. 實(shí)際開發(fā)中 有很多場(chǎng)景 開發(fā)環(huán)境 測(cè)試環(huán)境 (準(zhǔn))生產(chǎn)環(huán)境 辦公室環(huán)境 家里的環(huán)境....
ii. 如 有三個(gè)場(chǎng)景 A ,B ,C 以數(shù)據(jù)庫(kù)配置為例 (不同場(chǎng)景開發(fā) 切換到不同場(chǎng)景的配置)
- 應(yīng)用配置文件 conf/config.php 配置’app_status’=> ‘’
- 在conf/下 新增場(chǎng)景配置文件 a.php ,b.php ,c.php
- 應(yīng)用配置文件 conf/config.php 中 ‘a(chǎn)pp_status’=>’’ 指向a|b|c 就調(diào)用哪個(gè)場(chǎng)景的配置
A:
B:
C:
- 總結(jié) : 需要場(chǎng)景配置的時(shí)候
a) 應(yīng)用配置文件中 conf/config.php ‘a(chǎn)pp_status’=>
b) 新建場(chǎng)景配置文件 如 conf/a.php ...
|
<?php
return [
'app_address' => 'a' ,
'database' => [
// 數(shù)據(jù)庫(kù)類型
'type' => 'oracle',
// 數(shù)據(jù)庫(kù)連接DSN配置
'dsn' => '',
'port' => '1521' ,
// 服務(wù)器地址
'hostname' => '127.0.0.1',
// 數(shù)據(jù)庫(kù)名
'database' => 'testA',
// 數(shù)據(jù)庫(kù)用戶名
'username' => 'oracle',
// 數(shù)據(jù)庫(kù)密碼
'password' => 'oracle',
// 數(shù)據(jù)庫(kù)連接端口
'hostport' => '',
...
|
c) 需要切換場(chǎng)景的時(shí)候 直接 應(yīng)用配置文件
conf/config.php ‘a(chǎn)pp_status’=> 指向所需要的場(chǎng)景
注意:數(shù)據(jù)庫(kù)的配置項(xiàng) 需要配置所有的 即推薦把 thinkphp/convention.php文件中 ‘database’=>所有內(nèi)容全都拷貝過來(lái) 配置 貌似是個(gè)bug
五秦躯、模塊配置
i. 之前上述配置 都屬于引應(yīng)用級(jí)別(所有模塊都有效)
ii. 模塊配置: 實(shí)現(xiàn)僅對(duì)當(dāng)前模塊配置有效
- 背景: 當(dāng)前有兩個(gè)模塊 admin | home
- 在conf下新建兩個(gè)目錄 admin|home (對(duì)應(yīng)兩個(gè)模塊 ) 目錄下分別新建config.php(此文件名 算是規(guī)定的)
- 分別打印出 admin|home 模塊下的配置
配置生效 僅對(duì)當(dāng)前模塊有效 模塊之間互不影響 extra擴(kuò)展配置 同理
六忆谓、動(dòng)態(tài)配置
i. 主要用于對(duì)當(dāng)前控制器或者是某個(gè)方法 動(dòng)態(tài)的配置設(shè)置
- 當(dāng)前控制器的配置 __construct() 構(gòu)造函數(shù)中配置 ---對(duì)整個(gè)控制器有效
分別訪問index|delete方法
- 在方法中的配置 ---僅對(duì)當(dāng)前方法有效
分別訪問index|delete方法
七裆装、Config類和config助手函數(shù)
i. Config類和config()作用: 對(duì)配置(慣例配置thinkphp/convention.php 應(yīng)用配置conf/config.php以及擴(kuò)展配置)的操作【has查詢是否配置 set設(shè)置 get獲取值等等】
ii. Config類在使用的時(shí)候 優(yōu)先定義命名空間 use think\Config; 或者是帶命名空間操作\think\Config::has(‘’)
config()可以直接使用
iii. Config類
iv. Config類 Config::get()
- get() 可傳參數(shù)string 參數(shù)名 ,string 作用域
參數(shù)為空 獲取所有配置
對(duì)應(yīng)的助手函數(shù)是 config()
a) use think\Config ;
b) $res = \think\Config::get() ;
v. 助手函數(shù) thinkphp/helper.php
a) config()
b) 開發(fā)中 推薦使用Config類 來(lái)更改配置信息 如果在入口文件或者引入helper.php之前 定義過config()函數(shù) 那么就不能再通過config()獲取的信息會(huì)有問題
c) 設(shè)置參數(shù) Config::set() ---config(‘’,’’,’’)
d) COnfig::has(‘’) --- 判斷是否配置 【參數(shù)不存在或者null都返回false】
i. 如 Config::has(‘username’) 判斷username是否存在
ii. 對(duì)應(yīng)助手函數(shù) config(‘?username’)
八、環(huán)境變量的配置和使用
i. dump($_ENV) ; 需要php.ini中 variables_order = "EGPCS"
ii. Thinkphp5中 在application同級(jí) 新建文件 .env
iii. use think\Env ; Env::get(‘’)
iv. Env::get(‘pass’,’default’) 若是pass有值 則返回值 若沒配置返回第二個(gè)參數(shù)default
v. 分組配置
vi. 配置場(chǎng)景(開發(fā)環(huán)境 生產(chǎn)環(huán)境...)
.env文件 ststus=dev如dev(開發(fā)環(huán)境)|test(測(cè)試環(huán)境)|pro(生產(chǎn)環(huán)境)
conf/config.php
- conf/dev.php 根據(jù)不同的場(chǎng)景 新建test.php |pro.php
根據(jù).env文件的配置 切換場(chǎng)景...
若是 在.env中 配置了數(shù)據(jù)庫(kù)的信息 database
a) .env
b) conf/database.php
vii. 總結(jié): 各個(gè)環(huán)境配置不同的.env 文件 切換環(huán)境的時(shí)候 只需要切換不同的.env文件即可
FAQ:
一倡缠、啟動(dòng)本地環(huán)境 查看端口占用
1.找到被占端口pid
netstat -aon|findstr "3306"
2.根據(jù)pid 查看進(jìn)程
tasklist|findstr "1880"
3.結(jié)束進(jìn)程
taskkill /f /t /im mysqld.exe
二哨免、自定義common模塊報(bào)錯(cuò):
報(bào)錯(cuò)信息:
分析:
這是thinkphp的規(guī)定 默認(rèn)common是公用模塊 存放 通用方法 不允許在URL上直接訪問
解決:
將重復(fù)性的代碼 權(quán)限 數(shù)據(jù)處理放在common模塊 簡(jiǎn)化程序
三、修改application目錄
i. 將application目錄重命名 app
ii. 修改public/index.php define(‘APP_PATH’, DIR . ‘/../app/’);