Codeigniter 2.1 HMVC 實作

前言

HMVC不是什麼新東西,只是最近因為專案的需求,所以把原本的專案架構做了一些修改,導入了HMVC架構。
何謂HMVC?可以直接看wiki的解釋:http://zh.wikipedia.org/wiki/HMVC

簡單來說,我給他的解釋就是模組化。

版本

以下是我實作的經驗,用的版本是wiredesignz的5.4版
可以到官方的http://bitbucket.org下載最新的版本
而Codeigniter的版本是 2.1.0

實作

Step 1 - 解壓、複製檔案:

下載好HMVC的檔案後,直接解壓縮,裡面會有二個檔案夾:
  • core
  • third_party
把這二個檔案夾裡的檔案分別複製到Codeigniter資料夾的:
  • Application/core
  • Application/third_party
 裡,第一步就完成了。

Step 2 - 修改config檔:

在Codeigniter裡的config/config.php的檔案裡,加入以下程式碼:

$config['modules_locations'] = array(
    APPPATH.'modules/' => '../modules/',
);

Step 3 - 新增modules資料夾 

在Application裡新增一個名為 modules 的資料夾,並且在裡面直接新增模組的資料夾,假設我要新增的模組叫news
那麼在Application/modules裡的應該會有以下資料夾:
-news
   -controllers
   -views
   -models
這裡面的MVC的用法,就和原本的CI的Application一樣了
要注意的有二點:

第一:要把在modules裡的controller的extend從CI_Controller改成MX_Controller

第二(重要):要呼叫模組的controllerd的extend從CI_Controller改成MX_Controller

否則會出現以下錯誤:
PHP Fatal error:  Cannot redeclare class CI in ...application/third_party/MX/Base.php on line 57
舉例來說,如果我有在home的這個controller裡用到news模組,那麼我就要把home這個controller的 extend改成
class Home extends MX_Controller {
...
}

Step 4 - 測試:

當你在modules中建好mvc架構後,可以直接打網址
http://yoursite.com/index.php/{Module名稱}/{Controller名稱}/{Method名稱}
來測試你的HMVC架構是否有完成設定

若要在你的view中,直接呼叫模組,可以在你的view中直接插入以下語法
<? echo Modules::run( 'course_display/course_list/index' ); ?>

或是如果你要帶參數進模組,則可以使用
<? echo Modules::run( 'course_display/course_list/index','參數1','參數2' ); ?> 
That's it !
分享到 Google+

作者資訊

eugene
王佑哲 Eugene Wang,創業者、工程師、部落客,Inside網路趨勢共同創辦人,現為貝殼放大營運長

2 回應: