溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

thinkphp配置配置多應(yīng)用多配置的方法

發(fā)布時(shí)間:2021-01-16 10:42:35 來(lái)源:億速云 閱讀:239 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(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)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI