編程學習網 > PHP技術 > Yii1 > Yii框架官方系列指南系列11——基礎知識:模塊
2014
11-07

Yii框架官方系列指南系列11——基礎知識:模塊

注意:?版本 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。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取