閒話很少說,TP5(5.0.20) 在配置多入口文件的時候你是否遇到過一下的問題呢?php
開發設計的需求吧網站拆分爲前臺、後臺、API 3 個模塊,對應的也須要3個入口文件,後臺和API入口文件是用PATH_INFO 模式訪問(關閉路由)。thinkphp
在配置後臺入口文件的時候,直接從前臺入口文件拷貝了主要代碼以下api
<?php // [ 後臺應用入口文件 ] // 定義應用目錄 define('APP_PATH', __DIR__ . '/../application/'); //定義自定義的配置目錄 define('CONF_PATH', __DIR__ . '/../config/'); //開啓調試 define('APP_DEBUG', true); //關閉opcache緩存模塊 ini_set('opcache.revalidate_freq',0); //綁定admin模塊 define('BIND_MODULE','admin/Index'); // 加載框架引導文件 require __DIR__ . '/../thinkphp/start.php'; //關閉admin模塊下的路由,必須寫在框架引導文件以後 \think\App::route(false);
測試一下是否成功,(づ ̄3 ̄)づ╭❤~biubiu! 報錯...緩存
個人個×,什麼鬼,我綁定了admin 模塊了啊,報個index模塊不存在,什麼意思,牛頭不對馬嘴啊app
通過逐步的排查分析,發現是config 配置文件中配置中開啓了路由,可是 admin 入口文件中關閉路由方式不對(查看了官方文檔和搜了下其餘人所說的,徹底沒用)。框架
在5.0系列的入口文件中 加載框架引導文件只有一句代碼:測試
require __DIR__ . '/../thinkphp/start.php';
問題就出在這 !!!!網站
要想關閉路由須要把上面的加載代碼改成ui
require __DIR__ . '/../thinkphp/base.php';// 加載框架基礎文件 // 須要執行的操做 \think\App::route(false);//關閉路由,必須寫在基礎框架以後,用於執行以前 \think\App::run()->send();// 執行應用
這樣才能使自定義的配置文件生效。spa
還發現個問題是在入口文件中定義的一些設置其實根本沒生效,如define('APP_DEBUG', true');這個不論改爲大小寫仍是放在入口文件中任意位置,試過以後根本不起做用,必須在配置文件中去設置才能生效。
入口文件中可動態配置常量,但實際有些是不會生效的,須要測試後才能知道(不要一味的照搬)
若是想要模塊有不一樣的設置的話,在 應用目錄=》模塊目錄=》config.php 中進行設置,會覆蓋最上層的應用設置的;也能夠在自定義的 配置目錄config =》模塊目錄(如admin)=》config.php 中設置。
擴展配置在extra文件夾下,文件名就是配置名稱,配置的選項是該擴展配置的二級配置。每一個模塊均可以設置獨立的擴展配置。
如在在自動公共配置目錄的extra目錄下新建一個myconfig.php文件,寫入配置項
<?php return [ //是否容許用戶註冊 [off|on] 'user_enable_register' => 'on', //是否容許用戶登陸 [off|on] 'user_enable_login' => 'on', //前臺訪問key值 'index_key' => 'indexkey', //後臺訪問key值 'admin_key' => 'dminkey', //api文檔key值 'api_key' => 'apikey', ];
生成的二級配置以下
'myconfig' => 'user_enable_register' => string 'on' 'user_enable_login' => string 'on' 'index_key' => string 'indexkey' 'admin_key' => string 'adminkey' 'api_key' => string 'apikey'
配置優先級,優先級高的設置相同配置會覆蓋優先級低的,自定義配置目錄下的要優先於應用目錄下的配置文件
即:
提示:在實際開發中,入口文件設置和配置文件設置要多注意測試,有些問題,須要用不一樣的方式去測試後才知道是否正確。