您好,登錄后才能下訂單哦!
1.模塊化設(shè)計(jì)
一個(gè)完整的ThinkPHP應(yīng)用基于模塊/控制器/操作設(shè)計(jì),并且,如果有需要的話,可以支持多入口文件和多級控制器。
一個(gè)典型的URL訪問規(guī)則是(我們以默認(rèn)的PATHINFO模式為例說明,當(dāng)然也可以支持普通的URL模式):
http://serverName/index.php(或者其他應(yīng)用入口文件)/模塊/控制器/操作/[參數(shù)名/參數(shù)值...]
ThinkPHP3.2的應(yīng)用可以支持切換到命令行訪問,如果切換到命令行模式下面的訪問規(guī)則是:
>php.exe index.php(或其它應(yīng)用入口文件) 模塊/控制器/操作/[參數(shù)名/參數(shù)值...]
解釋下其中的幾個(gè)概念:
名稱 | 描述 |
應(yīng)用 | 基于同一個(gè)入口文件訪問的項(xiàng)目我們稱之為一個(gè)應(yīng)用。 |
模塊 | 一個(gè)應(yīng)用下面可以包含多個(gè)模塊,每個(gè)模塊在應(yīng)用目錄下面都是一個(gè)獨(dú)立的子目錄。 |
控制器 | 每個(gè)模塊可以包含多個(gè)控制器,一個(gè)控制器通常體現(xiàn)為一個(gè)控制器類。 |
操作 | 每個(gè)控制器類可以包含多個(gè)操作方法,也可能是綁定的某個(gè)操作類,每個(gè)操作是URL訪問的最小單元 |
模塊化設(shè)計(jì)的思想下面模塊是最重要的部分,模塊其實(shí)是一個(gè)包含配置文件、函數(shù)文件和MVC文件(目錄)的集合。
新版采用模塊化的設(shè)計(jì)架構(gòu),下面是一個(gè)應(yīng)用目錄下面的模塊目錄結(jié)構(gòu),每個(gè)模塊可以方便的卸載和部署,并且支持公共模塊。
Application 默認(rèn)應(yīng)用目錄(可以設(shè)置) ├─Common 公共模塊(不能直接訪問) ├─Home 前臺(tái)模塊 ├─Admin 后臺(tái)模塊 ├─... 其他更多模塊 ├─Runtime 默認(rèn)運(yùn)行時(shí)目錄(可以設(shè)置)
每個(gè)模塊是相對獨(dú)立的,其目錄結(jié)構(gòu)如下:
├─Module 模塊目錄 │ ├─Conf 配置文件目錄 │ ├─Common 公共函數(shù)目錄 │ ├─Controller 控制器目錄 │ ├─Model 模型目錄 │ ├─Logic 邏輯目錄(可選) │ ├─Service Service目錄(可選) │ ... 更多分層目錄可選 │ └─View 視圖目錄
由于采用多層的MVC機(jī)制,除了Conf和Common目錄外,每個(gè)模塊下面的目錄結(jié)構(gòu)可以根據(jù)需要靈活設(shè)置和添加,所以并不拘泥于上面展現(xiàn)的目錄。
●公共模塊
Common模塊是一個(gè)特殊的模塊,是應(yīng)用的公共模塊,訪問所有的模塊之前都會(huì)首先加載公共模塊下面的配置文件(Conf/config.php
)和公共函數(shù)文件(Common/function.php
)。但Common模塊本身不能通過URL直接訪問,公共模塊的其他文件則可以被其他模塊繼承或者調(diào)用。
公共模塊的位置可以通過COMMON_PATH常量改變,我們可以在入口文件中重新定義COMMON_PATH如下:
define('COMMON_PATH','./Common/');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
其應(yīng)用目錄結(jié)構(gòu)變成:
www WEB部署目錄(或者子目錄)
├─index.php 入口文件
├─README.md README文件
├─Common 應(yīng)用公共模塊目錄
├─Application 應(yīng)用模塊目錄
├─Public 應(yīng)用資源文件目錄
└─ThinkPHP 框架目錄
定義之后,Application目錄下面就不再需要Common目錄了。
●自動(dòng)生成模塊目錄
從3.2.2版本開始,可以支持自動(dòng)生成默認(rèn)模塊之外的模塊目錄以及批量生成控制器和模型類。
例如,如果我們需要生成一個(gè)Admin模塊用于后臺(tái)應(yīng)用,在應(yīng)用入口文件中定義如下:
// 綁定Admin模塊到當(dāng)前入口文件
define('BIND_MODULE','Admin');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
然后訪問URL地址
http://serverName/index.php
就會(huì)生成Admin模塊的目錄,并生成一個(gè)默認(rèn)的控制器類Admin\Controller\IndexController
。如果需要生成更多的控制器類,可以定義BUILD_CONTROLLER_LIST
常量,例如:
// 綁定Admin模塊到當(dāng)前入口文件
define('BIND_MODULE','Admin');
define('BUILD_CONTROLLER_LIST','Index,User,Menu');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
訪問后會(huì)自動(dòng)生成三個(gè)指定的控制器類:
Admin\Controller\IndexController
Admin\Controller\UserController
Admin\Controller\MenuController
注意:默認(rèn)生成的控制器類都是繼承Think\Controller
,如果需要繼承其他的公共類需要另外調(diào)整。
如果在應(yīng)用的公共配置文件中設(shè)置關(guān)閉了
APP_USE_NAMESPACE
的話,生成的控制器類則不會(huì)采用命名空間定義。
還可以自己手動(dòng)調(diào)用Think\Build
類的方法來生成控制器類,例如:
// 生成Admin模塊的Role控制器類
// 默認(rèn)類庫為Admin\Controller\RoleController
// 如果已經(jīng)存在則不會(huì)重新生成
\Think\Build::buildController('Admin','Role');
同樣,也可以定義BUILD_MODEL_LIST
支持生成多個(gè)模型類:
// 綁定Admin模塊到當(dāng)前入口文件
define('BIND_MODULE','Admin');
define('BUILD_CONTROLLER_LIST','Index,User,Menu');
define('BUILD_MODEL_LIST','User,Menu');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
訪問會(huì)自動(dòng)生成模型類:
Admin\Model\UserModelAdmin\Model\MenuModel
注意:默認(rèn)生成的模型類都是繼承Think\Model
,如果需要繼承公共的模型類需要另外調(diào)整。
如果在應(yīng)用的公共配置文件中設(shè)置關(guān)閉了
APP_USE_NAMESPACE
的話,生成的模型類則不會(huì)采用命名空間定義。
也可以自己手動(dòng)調(diào)用Think\Build類的方法來生成模型類,例如:
// 生成Admin模塊的Role模型類
// 默認(rèn)類庫為Admin\Model\RoleModel
// 如果已經(jīng)存在則不會(huì)重新生成
\Think\Build::buildModel('Admin','Role');
●禁止訪問模塊
3.2對模塊的訪問是自動(dòng)判斷的,所以通常情況下無需配置模塊列表即可訪問,但可以配置禁止訪問的模塊列表(用于被其他模塊調(diào)用或者不開放訪問),默認(rèn)配置中是禁止訪問Common
模塊和Runtime
模塊(Runtime目錄是默認(rèn)的運(yùn)行時(shí)目錄),我們可以增加其他的禁止訪問模塊列表:
// 設(shè)置禁止訪問的模塊列表
'MODULE_DENY_LIST' => array('Common','Runtime','Api'),
設(shè)置后,Api模塊不能通過URL直接訪問,事實(shí)上,可能我們只是在該模塊下面放置一些公共的接口文件,因此都是內(nèi)部調(diào)用即可。
●設(shè)置訪問列表
如果你的應(yīng)用下面模塊比較少,還可以設(shè)置允許訪問列表和默認(rèn)模塊,這樣可以簡化默認(rèn)模塊的URL訪問。
'MODULE_ALLOW_LIST' => array('Home','Admin','User'),
'DEFAULT_MODULE' => 'Home',
設(shè)置之后,除了Home、Admin和User模塊之外的模塊都不能被直接訪問,并且Home模塊是默認(rèn)訪問模塊(可以不出現(xiàn)在URL地址)。
●單模塊設(shè)計(jì)
如果你的應(yīng)用夠簡單,那么也許僅僅用一個(gè)模塊就可以完成,那么可以直接設(shè)置:
// 關(guān)閉多模塊訪問
'MULTI_MODULE' => false,
'DEFAULT_MODULE' => 'Home',
一旦關(guān)閉多模塊訪問后,就只能訪問默認(rèn)模塊(這里設(shè)置的是Home)。
單模塊設(shè)計(jì)后公共模塊依然有效。
●多入口設(shè)計(jì)
可以給相同的應(yīng)用及模塊設(shè)置多個(gè)入口,不同的入口文件可以設(shè)置不同的應(yīng)用模式或者綁定模塊。
例如,我們在index.php
文件的同級目錄新增一個(gè)home.php
入口文件,并綁定Home模塊:
// 綁定Home模塊到當(dāng)前入口文件
define('BIND_MODULE','Home');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
綁定模塊后,原來的訪問地址
http://serverName/index.php/Home/Index/index
就變成
http://serverName/home.php/Index/index
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。