Feed on
Posts
Comments
Email訂閱

This post is under 軟體開發

  1. MVC by CI3.0 : http://codeigniter.org.tw/
  2. 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架構成為超越應用層級共用模組是可行的。

但必須注意:

  1. 模組裏頭的MVC類別都不要與個別應用的MVC架構同名,我遇到的狀況是在載入自訂的library時,出現 class not found 的錯誤。可能是因為CI缺乏命名空間(naming space)。
  2. 另外既然模組已經搬到應用層級之上,便要在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
                |- ...

 

留言區