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


