標籤:style class blog code http color
1.模組結構
完整的ThinkPHP用用圍繞模組/控制器/操作設計,並支援多個入口檔案盒多級控制。ThinkPHP預設PATHINFO模式,如下:
http://serverName/index.php(或者其他應用入口檔案)/模組/控制器/操作/[參數名/參數值...]
應用:由同一個入口檔案訪問的項目稱為一個應用,在完整版的代碼中就是Application
模組:一個應用下面可以包含多個模組,每個模組對應獨立的目錄,在完整版的代碼中有Admin,Home,Common,Runtime四個模組
控制器:每個模組下有多個控制器,放在Controller目錄裡面,控制器對應一個單獨的php類檔案
操作:在控制器中又可以包含多個操作方法,還可以邦東某個操作類,每個操作就是URL訪問的最小單元,這個有點迷惑,類不是方法,可以有傳回值嗎?
2.模組設計
模組的目錄結構如下:
Application 預設應用目錄(可以設定)
├─Common 公用模組(不能直接存取)
├─Home 前台模組
├─Admin 後台模組
├─... 其他更多模組
├─Runtime 預設運行時目錄(可以設定)
模組不是固定的,可以方便的刪除添加,但是一般Common,Runtime兩個不用刪除。
在模組內部又可以包含配置,控制器,模型等目錄,結構如下:
├─Module 模組目錄
│ ├─Conf 設定檔目錄
│ ├─Common 公用函數目錄
│ ├─Controller 控制器目錄
│ ├─Model 模型目錄
│ ├─Logic 邏輯目錄(可選)
│ ├─Service Service目錄(可選)
│ ... 更多分層目錄可選
│ └─View 視圖目錄
除了Common和Conf目錄之外,其他的可以靈活的添加和刪除。
Common模組是一個公用模組,訪問所有模組之前都會首先載入這個公用模組下的設定檔Conf/config.php和公用函數檔案Common/function.php,但是沒有找到這個function.php檔案,Common模組本身不能通過URL直接存取,公用模組中的其他檔案可以被其他模組整合或者調用。此外公用模組的位置可以通過COMMON_PATH常量改變,在入口檔案中重新定義COMMON_PATH如下:
define(‘COMMON_PATH‘,‘./Common/‘);
define(‘APP_PATH‘,‘./Application/‘);
require ‘./ThinkPHP/ThinkPHP.php‘;
目錄結構變化如下
www WEB部署目錄(或者子目錄)
├─index.php 入口檔案
├─README.md README檔案
├─Common 應用公用模組目錄
├─Application 應用模組目錄
├─Public 應用資源檔目錄
└─ThinkPHP 架構目錄
我這裡不是用define(‘COMMON_PATH‘,‘./Common/‘);產生的,而是define(‘COMMON_PATH‘,‘Common/‘);去掉了前面的./,組建目錄如下:
這樣Application目錄下的Common目錄就沒有作用了。
3.自動產生模組目錄
3.2.2版本開始可以自動產生預設模組和自動組建控制器和模型,例如現在要產生一個Admin模組用於網站後台管理,可以在入口檔案下面添加下面代碼
// 綁定Admin模組到當前入口檔案define(‘BIND_MODULE‘,‘Admin‘);define(‘APP_PATH‘,‘./Application/‘);require ‘./ThinkPHP/ThinkPHP.php‘;
然後重新整理就可以在Application目錄下面產生一個Admin目錄,並且在Controller目錄裡面產生一個預設的控制器IndexController.Class.php檔案,手冊中的注釋是綁定Admin模組到當前入口檔案,其實這句話的具體作用是:如果沒有應用下面沒有Admin這個模組那麼自動產生這個模組並以此模組作為入口檔案,注意如果綁定的是Home這個模組,而去訪問Admin這個目錄就會報錯的,http://Servername/thinkphp/index.php/Admin/Index,錯誤內容是:
無法載入控制器:Admin
還有一點,如果產生模組之後我們刪除這句綁定,就沒有錯了,這樣可以隨便訪問任何模組。
產生模組之後我們還可以自動在模組內組建控制器和模型檔案,代碼如下:
define(‘BIND_MODULE‘,‘Admin‘);define(‘BUILD_CONTROLLER_LIST‘,‘Index,User,Menu‘);
注意這兩句要一起執行,我測試發現如果開始執行第一句產生模組,再加上後面一句組建控制器的時候是不成功的,要刪掉這個Admin目錄,然後執行,這樣會組建目錄然後再Controller目錄下組建控制器檔案,這個有點傻瓜。
產生的控制器是繼承自Think\Controller下。也可以實用命令列來組建控制器,這裡我在贅述。
同樣的道理也可以自動產生模型,代碼如下:
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‘;
同樣的,不能有先後順序,就是說這三句必須一起執行才有效,不能逐一執行。控制器繼承自Think\Model
據我觀察,如果沒有綁定模組是會自動產生Home模組並訪問這個模組的
系統預設配置中是禁止訪問Common模組和Runtime模組,我們也可自己添加禁止訪問的模組,代碼如下:
// 設定禁止訪問的模組列表‘MODULE_DENY_LIST‘ => array(‘Common‘,‘Runtime‘,‘Api‘),
同樣也可設定可以訪問的模組和預設模組,代碼如下:
‘MODULE_ALLOW_LIST‘ => array(‘Home‘,‘Admin‘,‘User‘),‘DEFAULT_MODULE‘ => ‘Home‘,
據我觀察,就算不設定預設模組,ThinkPHP也會預設產生並訪問Home模組。
如果項目比較簡單,還可以設定單模組,代碼如下:
// 關閉多模組訪問‘MULTI_MODULE‘ => false,‘DEFAULT_MODULE‘ => ‘Home‘,
可以給相同的用用及模組綁定多個入口,不同入口檔案設定不同的應用模式和綁定模組,代碼如下:
// 綁定Home模組到當前入口檔案$_GET[‘m‘] = ‘Home‘; define(‘APP_PATH‘,‘./Application/‘);require ‘./ThinkPHP/ThinkPHP.php‘;
這樣就可以使用下面的路徑來訪問了http://Servername/thinkphp/home.php/Index
這個home.php裡的內容和index.php內容一樣,也是一個入口檔案。