閑話不多說,TP5(5.0.20) 在配置多入口文件的時候你是否遇到過一下的問題呢?
開發設計的需求吧網站拆分為前台、后台、API 3 個模塊,對應的也需要3個入口文件,后台和API入口文件是用PATH_INFO 模式訪問(關閉路由)。
在配置后台入口文件的時候,直接從前台入口文件拷貝了主要代碼如下
<?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模塊不存在,什么意思,牛頭不對馬嘴啊
經過逐步的排查分析,發現是config 配置文件中配置中開啟了路由,但是 admin 入口文件中關閉路由方式不對(查看了官方文檔和搜了下其他人所說的,完全沒用)。
在5.0系列的入口文件中 加載框架引導文件只有一句代碼:
require __DIR__ . '/../thinkphp/start.php';
問題就出在這 !!!!
要想關閉路由需要把上面的加載代碼改為
require __DIR__ . '/../thinkphp/base.php';// 加載框架基礎文件 // 需要執行的操作 \think\App::route(false);//關閉路由,必須寫在基礎框架之后,用於執行之前 \think\App::run()->send();// 執行應用
這樣才能使自定義的配置文件生效。
還發現個問題是在入口文件中定義的一些設置其實根本沒生效,如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'
配置優先級,優先級高的設置相同配置會覆蓋優先級低的,自定義配置目錄下的要優先於應用目錄下的配置文件
即:
- config/模塊/extra/配置文件 優先級高於 application/模塊/extra/配置文件
- config/模塊/config.php 優先級高於 application/模塊/config.php
- config/config.php 優先級高於 application/config.php
提示:在實際開發中,入口文件設置和配置文件設置要多注意測試,有些問題,需要用不同的方式去測試后才知道是否正確。