Yii framework架構之模組開發分析_PHP教程

來源:互聯網
上載者:User

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...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.