注意:?版本 1.0.3 起支持模塊。
模塊是一個獨立的軟件單元,它包含?模型,?視圖,?控制器?和其他支持的組件。 在許多方面上,模塊看起來像一個?應用。主要的區別就是模塊不能單獨部署,它必須存在于一個應用里。 用戶可以像他們訪問普通應用的控制器那樣訪問模塊中的控制器。
模塊在一些場景里很有用。對大型應用來說,我們可能需要把它劃分為幾個模塊,每個模塊可以單獨維護和部署。一些通用的功能,例如用戶管理, 評論管理,可以以模塊的形式開發,這樣他們就可以容易地在以后的項目中被復用。
1. 創建模塊
模塊組織在一個目錄中,目錄的名字即模塊的唯一?ID?。 模塊目錄的結構跟?應用基礎目錄?很相似。下面列出了一個fourm
?的模塊的典型的目錄結構:
forum/ ForumModule.php 模塊類文件 components/ 包含可復用的用戶組件 views/ 包含小物件的視圖文件 controllers/ 包含控制器類文件 DefaultController.php 默認的控制器類文件 extensions/ 包含第三方擴展 models/ 包含模塊類文件 views/ 包含控制器視圖和布局文件 layouts/ 包含布局文件 default/ 包含 DefaultController 的視圖文件 index.php 首頁視圖文件
模塊必須有一個繼承自?CWebModule?的模塊類。類的名字通過表達式?ucfirst($id).'Module'
?確定, 其中的?$id
代表模塊的 ID (或者說模塊的目錄名字)。 模塊類是存儲模塊代碼間可共享信息的中心位置。例如,我們可以使用CWebModule::params?存儲模塊參數,使用?CWebModule::components?分享模塊級的?應用組件?.
提示:?我們可以使用Gii中的模塊創建器創建新模塊的基本骨架。
2. 使用模塊
要使用模塊,首先將模塊目錄放在?應用基礎目錄?的?modules
?中。 然后在應用的?modules?屬性中聲明模塊 ID 。例如,為了使用上面的?forum
?模塊, 我們可以使用如下?應用配置:
return array( ...... 'modules'=>array('forum',...), ...... );
模塊也可以在配置時帶有初始屬性值。做法和配置?應用組件?很類似。 例如,?forum
?模塊可以在其模塊類中有一個名為postPerPage
?的屬性,它可以在?應用配置?中配置如下:
return array( ...... 'modules'=>array( 'forum'=>array( 'postPerPage'=>20, ), ), ...... );
模塊的實例可通過當前活動控制器的?module?屬性訪問。在模塊實例中,我們可以訪問在模塊級中共享的信息。 例如,為訪問上面的?postPerPage
?信息,我們可使用如下表達式:
$postPerPage=Yii::app()->controller->module->postPerPage; // or the following if $this refers to the controller instance // $postPerPage=$this->module->postPerPage;
模塊中的控制器動作可以通過?路由?moduleID/controllerID/actionID
?訪問。 例如,假設上面的?forum
?模塊有一個名為?PostController
?的控制器,我們就可以通過?路由?forum/post/create
?訪問此控制器中的?create
?動作。 此路由對應的 URL 即?http://www.example.com/index.php?r=forum/post/create
.
提示:?如果一個控制器位于?
controllers
?目錄的子目錄中,我們仍然可以使用上述?路由?格式。 例如,假設PostController
?位于?forum/controllers/admin
?中,我們可以通過?forum/admin/post/create
訪問?create
?動作。
3. 嵌套的模塊
模塊可以無限級嵌套。這就是說,一個模塊可以包含另一個模塊,而這另一個模塊又可以包含其他模塊。我們稱前者為父模塊?,后者為?子模塊. 子模塊必須定義在其父模塊的?modules?屬性中,就像我們前面在應用配置中定義模塊一樣。
要訪問子模塊中的控制器動作,我們應使用路由?parentModuleID/childModuleID/controllerID/actionID。
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://www.wangchenghua.com/post/1292/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料