Yii framework架構之模組開發分析
一個稍微大點的項目,如果按照yii產生的webapp進行開發。所有的controller放到controllers檔案夾下,所有的model放到models檔案夾下面,如果你有 n 多個 controller 和 n 多的 model ,這種情況下維護代碼將是一個非常痛苦的過程。為了避免這種情況,Yii 提供了一種 Modules(模組) 的目錄結構方式。
Modules(模組) 是一個獨立的單元,包含視圖、控制器和其它組件,它和一個應用的區別是不能單獨部署,模組都儲存在應用的 moudules 目錄裡面。
你的項目可以分成 n 多個 Module,然後每一個 Module 有自己的 controllers 和 models 。這樣的組織圖,無論是開發,管理都要方便簡潔許多。
YII中的模組是非常靈活的,一個模組可以包含子模組。理論上,模組可以是無限嵌套。
模組的目錄結構(這裡以下面產生的目錄結構做說明)
modules 模組的存放目錄
└── admin 一個模組,模組的名字對應是目錄的名字,唯一。也是路由中的moduleid
├── components 模組用到的組件
├── controllers 包含控制器
│ └── DefaultController.php 預設控制器
├── messages 國際化
├── models 模型類檔案
├── AdminModule.php 模組的類檔案
└── views 試圖檔案
├── default 預設視圖
│ ├── index.php 視圖檔案
└── layouts 包含布局檔案
基本的目錄結構如上,當然你可以在自己加入一些自訂的東西。
建立模組的方法(這裡我們通過 yii 內建的 gii 產生器來建立模組)
通過 yii 內建的 gii 產生器來建立基本的結構,開啟 gii 的方法是修改你的應用 config/main.php 檔案中如下內容:
array('gii'=>array('class'=>'system.gii.GiiModule','password'=>'123456',//你的密碼訪問時需要輸入'ipFilters'=>array('127.0.0.1','::1'),),),......
然後訪問url 你的應用/index.php?r=gii 訪問gii,開啟以後選擇,左邊菜單的 Module Generator 選項。你將會看到下面的畫面
在 Module ID 輸入模組的名稱,我這裡輸入 admin ,然後點擊 Preview 按鈕。如所示,它向你展示了所有將會被產生的檔案,允許你在建立之前預覽他們 :
然後點擊 Generate 按鈕,來產生所有檔案。因為 Web 服務器進程需要寫入許可權,所以確保你的 /protected 檔案夾對於該應用程式是可寫入的。
配置使用這個模組
我們對主設定檔 protected/config/main.php 進行配置,如下的代碼需要被修改,添加了'admin' :
......'modules'=>array( 'gii'=>array('class'=>'system.gii.GiiModule', 'password'=>'你的密碼',),'admin',),......
儲存上面的修改後後,我們的新 admin 模組已經可以使用了。我們可以通過以下地址訪問我們建立的模組:
你的應用/index.php?r=admin/default/index
在模組中使用 layout
我們訪問 index.php?r=admin/default/index 會發現,模組使用了你的應用下的 /protected/views /layouts/main.php 檔案,而我們可能希望使用 /protected/modules/admin/views/layouts /main.php 檔案,讓 admin 模組擁有獨立的布局視圖。我們可以在:
protected\modules\admin\controllers\DefaultController.php 添加如下代碼。
public $layout='application.modules.admin.views.layouts.main';
我們把從 /protected/views/layouts/main.php 拷貝到 /protected/modules/admin/views/layouts/ ,稍作修改,這樣模組就擁有了獨立的布局視圖。
在模組中使用Assets
添加新的模組時,一般會包含影像檔,CSS檔案,JavaScript檔案等。
模組可以直接從網站主目錄中引用。但是如果想要建立一個模組能夠在任何地方引用,並且能夠避免命名衝突,就要用到assets了。
過程是(這裡模組名是admin):
1、把需要用到的資源放在modules/admin/assets下。
2、然後通過 CAssetManager,Yii::app()->assetManager 能夠自動的將私人資源 publish 到公用目錄下網站目錄 /assets
3、Yii 會自動在網站目錄的 /assets 下建立一個隨機不衝突的檔案夾,如 2b31b42b,並把你的modules/admin/assets目錄下的檔案拷貝過去。
例如我的模組是Admin,檔案路徑通過如下代碼獲得,修改protected\modules\admin\AdminModule.php檔案。
class AdminModule extends CWebModule{private$_assetsUrl;public function getAssetsUrl(){if($this->_assetsUrl===null)$this->_assetsUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.admin.assets'));return$this->_assetsUrl;}public function setAssetsUrl($value){$this->_assetsUrl=$value;}}
然後,在 /protected/modules/admin/views/layouts/main.php 中使用 $this->module->assetsUrl 就可以調用你的css等檔案了。模板檔案的代碼如下:
4,通過如上操作,該模組只要把admin目錄拷貝,就可以多次複用了。
模組的配置,使用方法
在設定檔 /config/main.php 中:
設定檔中也可以及添加對模組中屬性初始化的參數例如:
......'modules'=>array('admin'=>array('web_url'=>'www.phpernote.com'), ......
對應在 Controller 中的訪問方式是:
Yii::app()->controller->module->web_url;
您可能感興趣的文章
- php用header()實現檔案下載,下載的檔案提示被破壞不能開啟的解決辦法
- CuteFTP串連ftp伺服器時彈出“遇到無效的參數”錯誤的解決辦法
- php smarty中文截取外掛程式開發樣本
- 關於使用in_array() foreach array_search() 尋找數組是否包含時的效能對比
- linux chmod(檔案或檔案夾許可權設定)命令參數及用法詳解
- iframe 子頁面如何操作父頁面元素
- javascript實現重新整理iframe的方法的總結
- array_walk 和 foreach, for 的效率的比較,php效能最佳化
http://www.bkjia.com/PHPjc/997441.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/997441.htmlTechArticleYii framework架構之模組開發分析 一個稍微大點的項目,如果按照yii產生的webapp進行開發。所有的controller放到controllers檔案夾下,所有的mode...