溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

thinkphp配置配置多應用多配置的方法

發布時間:2021-01-16 10:42:35 來源:億速云 閱讀:281 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關thinkphp配置配置多應用多配置的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

                                                       

多模塊

在 ThinkPHP 3.2.3 中,默認的應用目錄是 ./Application,下面的默認模塊是 Home 模塊,如果此時需要添加一個 Admin 模塊用于后臺應用,在默認的入口文件 ./index.php 中添加:

// 綁定Admin模塊到當前入口文件
define('BIND_MODULE','Admin');

此時運行 http://serverNmae/index.php,會在 ./Application 目錄下生成一個 Admin 模塊。但是此時訪問 http://serverName/index.php,實際上訪問的是新添加的 Admin 模塊,即使在 ./Applicaition/Common/Conf/config.php 中添加

//設置默認模塊
'DEFAULT_MODULE'    =>  'Home'

也無法正確定位到 Home 模塊。

實際上手冊中提到到的在入口文件定義 BIND_MODULE 的實際含義是定義默認模塊。參見:./ThinkPHP/Library/Think/Dispatcher.calss.php,該文件定義了 ThinkPHP 內置的 Dispatcher 類,用于完成 URL 解析、路由和調度(參見手冊中的 ”系統流程“ 一節),其中 Line:140

// 獲取模塊名稱
define('MODULE_NAME', defined('BIND_MODULE')? BIND_MODULE : self::getModule($varModule));

在靜態方法 dispatch 中,模塊名稱的獲取首先會在入口文件中查詢是否有定義 BIND_MODULE,如果有定義,則定義 MODULE_NAME 的值為定義的 BIND_MODULE 的值,否則調用該類中的靜態私有方法 getModule 來獲取實際的模塊名稱:

/**
     * 獲得實際的模塊名稱
     */
    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)])) {
                // 記錄當前別名
                define('MODULE_ALIAS',strtolower($module));
                // 獲取實際的模塊名
                return   ucfirst($maps[MODULE_ALIAS]);
            }elseif(array_search(strtolower($module),$maps)){
                // 禁止訪問原始模塊
                return   '';
            }
        }
        return strip_tags(ucfirst(strtolower($module)));
    }

該方法中,如果 URL 中不包含配置文件重定義的 VAR_MODULE (默認為 m,在 ./ThinkPHP/Conf/convention.php 中)的值,則找配置文件中定義的 DEFAULT_MODULE 的值。

通過以上分析,得出 BIND_MODULE 實際上是定義默認模塊,如果在項目中有多個模塊的話,不要這樣配置。

如果此時注釋默認入口文件 ./index.php 中的 BIND_MODULE(即采用默認的入口文件配置),那么直接訪問 http://serverName/admin 就可以訪問 Admin 模塊,因為在該入口文件中,定義了應用目錄 ./Application,那么訪問 http://serverName/admin 實際就是訪問了 ./Application/Admin/Controller/IndexController.class.php 中的 index 方法。

ThinkPHP 3.2.3 采用這種方式配置多模塊就可以了,無需在入口文件和配置文件中另作定義,這也是 ThinkPHP 官方推薦的分組模式。

另外一種配置就是多入口設計,即在默認入口文件 index.php 的同級創建 admin.php ,同時在 index.php 中添加:

// 綁定Home模塊到當前入口文件
define('BIND_MODULE','Home');

在 admin.php 中采用和 index.php 相同的配置,除了 BIND_MODULE 的定義,將 BIND_MODULE 的定義改為:

// 綁定Admin模塊到當前入口文件
define('BIND_MODULE','Admin');

然后在應用配置文件 ./Application/Common/Conf/config.php 中添加:

//設置默認模塊
'DEFAULT_MODULE'    =>  'Home',

此時訪問 http://serverName/index.php 就能訪問 Home 模塊,訪問 http://servername/admin.php ,就能訪問 Admin 模塊,而無法訪問 http://serverName/admin ,因為此時 index.php 只能訪問 Home 模塊。

多應用

通常情況下 ThinkPHP 3.2.3 無需使用多應用模式,因為大多數情況下都可以通過多模塊化以及多入口的設計來解決應用的擴展需求。

如果一定要使用多應用模式,例如創建應用 Application_API,那么可以在 ./Application 同級目錄下創建目錄 Applicaiton_API,同時增加入口文件 ./api.php,將應用目錄指向 ./Application_API:

// 定義應用目錄
define('APP_PATH','./Application_API/');

注意初始情況下新增加的應用一定要有 Home 模塊,即使在 ./Application_API/Common/Conf/config.php 中設置了

//設置默認模塊
'DEFAULT_MODULE'    =>  'Api',

也許要初始有 Home 模塊,否則會報錯:無法加載 Index 控制器。

關于“thinkphp配置配置多應用多配置的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女