This post is under 軟體開發
- MVC by CI3.0 : http://codeigniter.org.tw/
- HMVC with CI by wiredesignz
經過以上的架構會讓HMVC的架構長得像以下這樣:(資料來源維基百科)
application |- modules |- module1 |- controllers |- controllers.php |- models |- models.php |- views |- index.php |- footer.php |- ... |- module2 |- controllers |- controllers.php |- models |- models.php |- views |- index.php |- footer.php |- ... |- .... |- controllers |- ... |- models |- ... |- views |- ...
但以上的架構並沒有將模組從應用層級(application level)獨立出來。因此若想在同一個 hosting 空間可以同時架設多個網站,而這些網站都可以共用模組,勢必要將模組從應用層級在往上一層提升,讓每個應用都可以使用相同的模組,真正達到最大化的共用。這樣的想法不知道能不能算是多租戶技術(multi-tenancy)的概念?但實務上延伸wiredesignz的HMVC架構成為超越應用層級共用模組是可行的。
但必須注意:
- 模組裏頭的MVC類別都不要與個別應用的MVC架構同名,我遇到的狀況是在載入自訂的library時,出現 class not found 的錯誤。可能是因為CI缺乏命名空間(naming space)。
- 另外既然模組已經搬到應用層級之上,便要在config中正確設定模組的路徑: 實體路徑 => 相對路徑(modules相對於應用的config.php) 如
‘d:/ci/modules/’ => ‘../../../modules/’
經過改良過後的HMVC架構可能會長得像這樣…
|- modules (實體路徑如 d:/ci/modules/) |- module1 |- controllers |- controllers.php |- models |- models.php |- views |- index.php |- footer.php |- ... |- module2 |- controllers |- controllers.php |- models |- models.php |- views |- index.php |- footer.php |- ... |- .... app1/application (實體路徑如 d:/ci/app1/application/) |- controllers |- ... |- models |- ... |- views |- ... app2/application (實體路徑如 d:/ci/app2/application/) |- controllers |- ... |- models |- ... |- views |- ...