您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)thinkphp配置配置多應(yīng)用多配置的方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
多模塊
在 ThinkPHP 3.2.3 中,默認(rèn)的應(yīng)用目錄是 ./Application,下面的默認(rèn)模塊是 Home 模塊,如果此時(shí)需要添加一個(gè) Admin 模塊用于后臺(tái)應(yīng)用,在默認(rèn)的入口文件 ./index.php 中添加:
// 綁定Admin模塊到當(dāng)前入口文件 define('BIND_MODULE','Admin');
此時(shí)運(yùn)行 http://serverNmae/index.php,會(huì)在 ./Application 目錄下生成一個(gè) Admin 模塊。但是此時(shí)訪問(wèn) http://serverName/index.php,實(shí)際上訪問(wèn)的是新添加的 Admin 模塊,即使在 ./Applicaition/Common/Conf/config.php 中添加
//設(shè)置默認(rèn)模塊 'DEFAULT_MODULE' => 'Home'
也無(wú)法正確定位到 Home 模塊。
實(shí)際上手冊(cè)中提到到的在入口文件定義 BIND_MODULE 的實(shí)際含義是定義默認(rèn)模塊。參見(jiàn):./ThinkPHP/Library/Think/Dispatcher.calss.php,該文件定義了 ThinkPHP 內(nèi)置的 Dispatcher 類,用于完成 URL 解析、路由和調(diào)度(參見(jiàn)手冊(cè)中的 ”系統(tǒng)流程“ 一節(jié)),其中 Line:140
// 獲取模塊名稱 define('MODULE_NAME', defined('BIND_MODULE')? BIND_MODULE : self::getModule($varModule));
在靜態(tài)方法 dispatch 中,模塊名稱的獲取首先會(huì)在入口文件中查詢是否有定義 BIND_MODULE,如果有定義,則定義 MODULE_NAME 的值為定義的 BIND_MODULE 的值,否則調(diào)用該類中的靜態(tài)私有方法 getModule 來(lái)獲取實(shí)際的模塊名稱:
/** * 獲得實(shí)際的模塊名稱 */ static private function getModule($var) { $module = (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_MODULE')); unset($_GET[$var]); if($maps = C('URL_MODULE_MAP')) { if(isset($maps[strtolower($module)])) { // 記錄當(dāng)前別名 define('MODULE_ALIAS',strtolower($module)); // 獲取實(shí)際的模塊名 return ucfirst($maps[MODULE_ALIAS]); }elseif(array_search(strtolower($module),$maps)){ // 禁止訪問(wèn)原始模塊 return ''; } } return strip_tags(ucfirst(strtolower($module))); }
該方法中,如果 URL 中不包含配置文件重定義的 VAR_MODULE (默認(rèn)為 m,在 ./ThinkPHP/Conf/convention.php 中)的值,則找配置文件中定義的 DEFAULT_MODULE 的值。
通過(guò)以上分析,得出 BIND_MODULE 實(shí)際上是定義默認(rèn)模塊,如果在項(xiàng)目中有多個(gè)模塊的話,不要這樣配置。
如果此時(shí)注釋默認(rèn)入口文件 ./index.php 中的 BIND_MODULE(即采用默認(rèn)的入口文件配置),那么直接訪問(wèn) http://serverName/admin 就可以訪問(wèn) Admin 模塊,因?yàn)樵谠撊肟谖募校x了應(yīng)用目錄 ./Application,那么訪問(wèn) http://serverName/admin 實(shí)際就是訪問(wèn)了 ./Application/Admin/Controller/IndexController.class.php 中的 index 方法。
ThinkPHP 3.2.3 采用這種方式配置多模塊就可以了,無(wú)需在入口文件和配置文件中另作定義,這也是 ThinkPHP 官方推薦的分組模式。
另外一種配置就是多入口設(shè)計(jì),即在默認(rèn)入口文件 index.php 的同級(jí)創(chuàng)建 admin.php ,同時(shí)在 index.php 中添加:
// 綁定Home模塊到當(dāng)前入口文件 define('BIND_MODULE','Home');
在 admin.php 中采用和 index.php 相同的配置,除了 BIND_MODULE 的定義,將 BIND_MODULE 的定義改為:
// 綁定Admin模塊到當(dāng)前入口文件 define('BIND_MODULE','Admin');
然后在應(yīng)用配置文件 ./Application/Common/Conf/config.php 中添加:
//設(shè)置默認(rèn)模塊 'DEFAULT_MODULE' => 'Home',
此時(shí)訪問(wèn) http://serverName/index.php 就能訪問(wèn) Home 模塊,訪問(wèn) http://servername/admin.php ,就能訪問(wèn) Admin 模塊,而無(wú)法訪問(wèn) http://serverName/admin ,因?yàn)榇藭r(shí) index.php 只能訪問(wèn) Home 模塊。
多應(yīng)用
通常情況下 ThinkPHP 3.2.3 無(wú)需使用多應(yīng)用模式,因?yàn)榇蠖鄶?shù)情況下都可以通過(guò)多模塊化以及多入口的設(shè)計(jì)來(lái)解決應(yīng)用的擴(kuò)展需求。
如果一定要使用多應(yīng)用模式,例如創(chuàng)建應(yīng)用 Application_API,那么可以在 ./Application 同級(jí)目錄下創(chuàng)建目錄 Applicaiton_API,同時(shí)增加入口文件 ./api.php,將應(yīng)用目錄指向 ./Application_API:
// 定義應(yīng)用目錄 define('APP_PATH','./Application_API/');
注意初始情況下新增加的應(yīng)用一定要有 Home 模塊,即使在 ./Application_API/Common/Conf/config.php 中設(shè)置了
//設(shè)置默認(rèn)模塊 'DEFAULT_MODULE' => 'Api',
也許要初始有 Home 模塊,否則會(huì)報(bào)錯(cuò):無(wú)法加載 Index 控制器。
關(guān)于“thinkphp配置配置多應(yīng)用多配置的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。