thinkphp學習筆記5—模組化設計

來源:互聯網
上載者:User

標籤:style   class   blog   code   http   color   

1.模組結構  

  完整的ThinkPHP用用圍繞模組/控制器/操作設計,並支援多個入口檔案盒多級控制。ThinkPHP預設PATHINFO模式,如下:

http://serverName/index.php(或者其他應用入口檔案)/模組/控制器/操作/[參數名/參數值...]

應用:由同一個入口檔案訪問的項目稱為一個應用,在完整版的代碼中就是Application

模組:一個應用下面可以包含多個模組,每個模組對應獨立的目錄,在完整版的代碼中有Admin,Home,Common,Runtime四個模組

控制器:每個模組下有多個控制器,放在Controller目錄裡面,控制器對應一個單獨的php類檔案

操作:在控制器中又可以包含多個操作方法,還可以邦東某個操作類,每個操作就是URL訪問的最小單元,這個有點迷惑,類不是方法,可以有傳回值嗎?

 

2.模組設計

模組的目錄結構如下:

  1. Application 預設應用目錄(可以設定)
  2. ├─Common 公用模組(不能直接存取)
  3. ├─Home 前台模組
  4. ├─Admin 後台模組
  5. ├─... 其他更多模組
  6. ├─Runtime 預設運行時目錄(可以設定)

模組不是固定的,可以方便的刪除添加,但是一般Common,Runtime兩個不用刪除。

在模組內部又可以包含配置,控制器,模型等目錄,結構如下:

  1. ├─Module 模組目錄
  2. │ ├─Conf 設定檔目錄
  3. │ ├─Common 公用函數目錄
  4. │ ├─Controller 控制器目錄
  5. │ ├─Model 模型目錄
  6. │ ├─Logic 邏輯目錄(可選)
  7. │ ├─Service Service目錄(可選)
  8. │ ... 更多分層目錄可選
  9. │ └─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‘;

目錄結構變化如下

  1. www WEB部署目錄(或者子目錄)
  2. ├─index.php 入口檔案
  3. ├─README.md README檔案
  4. ├─Common 應用公用模組目錄
  5. ├─Application 應用模組目錄
  6. ├─Public 應用資源檔目錄
  7. └─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內容一樣,也是一個入口檔案。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.