這一篇跟大家分享一下phalconcms多子產品的代碼組織。在phalconcms中有“前台(app/frontend目錄)”和“背景(app/backend目錄)”兩個子產品,分别對應着訪客和管理者的使用者群體。下面直接通過代碼來分析。
在“app/core/loader.php”檔案中,對“前台子產品”和“背景子產品”的“controllers”、“models”檔案目錄進行加載。這裡是用的命名空間加載(registernamespaces)方式,也可以用自動加載(registerdirs)來處理。

在“app/frontend/frontendmodule.php”和“app/backend/backendmodule.php”檔案中分别向di注冊前台和背景子產品所需的"dispathcer排程器服務"、“url服務”以及“view模闆服務”。這裡需要注意的是,前背景的“dispatcher排程器服務”中設定的“預設排程器”是不一樣的:
同理,前背景的“url服務”中設定的"url字首"也是不一樣的。這是為了在程式中調用生成url的方法($url->get("test/test"); )時,自動根據目前子產品來設定url的字首:
在 “app/core/services.php” 檔案中向di注冊多子產品共用的公用服務,如路由服務、資料庫連接配接服務、緩存服務、日志服務等等。
多子產品的路由服務如下:
"app/config/routes.php"中設定的路由規則如下:
以上步驟完成之後,最後在"app/public/index.php"中注冊多子產品:
至此,phalconcms的多子產品就能正常運作了。在浏覽器中通路帶有“/admin/” 字首的url,"dispatcher排程服務"就能将請求url分發到背景的控制器中("app/backend/controllers"),其他的url請求,就預設分發到前台控制器("app/frontend/controllers")。
以上貼的都是代碼片斷,具體代碼可以參考phalconcms的源碼:
同時,我也抽取了一份phalcon的示例代碼倉庫,phalcon多子產品的示例代碼已經送出上去了,後續教程的demo也會送出上去,歡迎大家star和fork:
<a href="https://github.com/kevinjay/marser-phalcon-demo">https://github.com/kevinjay/marser-phalcon-demo</a>
最後,歡迎大家加入qq群交流讨論:
廣州php高端交流群:158587573
phalcon玩家群:150237524