注意: 版本 1.0.3 起支援模組。
模組是一個獨立的軟體單元,它包含 模型, 視圖, 控制器 和其他支援的組件。 在許多方面上,模組看起來像一個 應用。主要的差別就是模組不能單獨部署,它必須存在於一個應用程式裡。 使用者可以像他們存取普通應用的控制器一樣存取模組中的控制器。
模組在某些場景裡很有用。對於大型應用來說,我們可能需要把它分成幾個模組,每個模組可以單獨維護和部署。一些通用的功能,例如使用者管理, 評論管理,可以以模組的形式開發,這樣他們就可以輕鬆地在以後的專案中被重複使用。
模組組織在一個目錄中,目錄的名字即模組的唯一 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中的模組建立器來建立新模組的基本骨架。
要使用模組,先將模組目錄放在 應用基礎目錄 的 modules
中。 然後在應用的 modules 屬性中聲明模組 ID 。例如,為了使用上面的 forum
模組, 我們可以使用以下 應用設定:
return array( ...... 'modules'=>array('forum',...), ...... );
模組也可以在設定時帶有初始屬性值。做法和配置 應用元件 很類似。 例如, forum
模組可以在其模組類別中有一個名為postPerPage
的屬性,它可以在 應用程式設定 中設定如下:
控制器的 module 屬性存取。在模組實例中,我們可以存取在模組級中共享的資訊。 例如,為存取上面的
訊息,我們可使用以下表達式:
return array( ...... 'modules'=>array( 'forum'=>array( 'postPerPage'=>20, ), ), ...... );
模組中的控制器可透過行動裝置存取。 例如,假設上面的
模組有一個名為
PostController
forum/post/create 來存取此控制器中的
create 動作。 此路由對應的 URL 即
http://www.php.cn/.
提示:
如果一個控制器位於 controllers
目錄的子目錄中,我們仍然可以使用上述 路由 格式。 例如,假設
位於. 子模組必須定義在其父模組的 modules 屬性中,就像我們前面在應用程式設定中定義模組一樣。 要存取子模組中的控制器動作,我們應使用路由 parentModuleID/childModuleID/controllerID/actionID。forum/controllers/admin 中,我們可以透過 forum/admin/post/create
子模組存取
create動作。
3. 嵌套的模組
模組可以無限級嵌套。這就是說,一個模組可以包含另一個模組,而這另一個模組又可以包含其他模組。我們稱前者為
父模組
,後者為
以上就是Yii框架官方系列指南系列11——基礎知識:模組的內容,更多相關內容請關注PHP中文網(www.php.cn)!