原文發表於: Phalcon入門教程之目錄結構
不少初學Phalcon的朋友,對於以Phalcon框架爲基礎構建的項目,應該如何組織目錄結構有點摸不着頭腦。好比多模塊的項目中,如何共用"libs"類庫和「models」目錄中模型類的狀況,就有不少剛接觸Phalcon朋友常常在羣裏問這種問題。php
咱們在翻閱Phalcon文檔的時候,會看到"教程2:INVO簡介"中有一個項目結構的demo,其中總結到「Phalcon不會強求應用程序使用特定的文件結構」。那麼,Phalcon經過什麼形式來加載這些能夠任意組織的目錄結構呢?html
下面以PhalconCMS的代碼爲例來進行講解。git
PhalconCMS/ app/ backend/ controllers/ models/ repositories/ views/ cache/ config/ core/ frontend/ controllers/ models/ repositories/ views/ helpers/ libs/ service/ tasks/ crontab/ public/
PhalconCMS中是經過「註冊命名空間」的方式來加載目錄結構:github
$loader = new \Phalcon\Loader(); $loader -> registerNamespaces(array( #註冊根目錄的命名空間 'Marser' => ROOT_PATH, #註冊共享目錄的命名空間 'Marser\App\Core' => ROOT_PATH . '/app/core', 'Marser\App\Helpers' => ROOT_PATH . '/app/helpers', 'Marser\App\Libs' => ROOT_PATH . '/app/libs', 'Marser\App\Service' => ROOT_PATH . '/app/service', 'Marser\App\Tasks' => ROOT_PATH . '/app/tasks', #註冊前臺目錄的命名空間 'Marser\App\Frontend\Controllers' => ROOT_PATH . '/app/frontend/controllers', 'Marser\App\Frontend\Models' => ROOT_PATH . '/app/frontend/models', 'Marser\App\Frontend\Repositories' => ROOT_PATH . '/app/frontend/repositories', #註冊後臺目錄的命名空間 'Marser\App\Backend\Controllers' => ROOT_PATH . '/app/backend/controllers', 'Marser\App\Backend\Models' => ROOT_PATH . '/app/backend/models', 'Marser\App\Backend\Repositories' => ROOT_PATH . '/app/backend/repositories', )) -> register();
以上代碼請參考:https://github.com/KevinJay/P... shell
Phalcon框架還提供了另外一種目錄加載方式:註冊文件夾,具體使用方式能夠翻閱Phalcon文檔。這裏就只介紹命名空間的方式。app
經過以上方式,咱們就能夠在「backend」和「frontend」兩個模塊中,共享「libs」、「helpers」等目錄下的操做類。在具體使用的時候,只須要經過命名空間引入相應的操做類便可。好比咱們在"app/backend/controllers/ArticlesController.php"控制器中須要使用「app/helpers/PaginatorHelper.php」操做類:框架
use \Marser\App\Helpers\PaginatorHelper;
在PhalconCMS多模塊結構中,「backend」和「frontend」都是單獨操做各自的「models」目錄。若是咱們想要實現多模塊共享"models"目錄,那麼能夠將「models」目錄提到「app」目錄下,並修改註冊命名空間中的路徑。在調用時,仍是經過命名空間的方式引入便可。frontend
就像文檔中說的「Phalcon不會強求應用程序使用特定的文件結構」,咱們能夠根據業務須要,或者開發習慣,自由組織咱們的項目目錄結構。只須要經過"Autoloader"註冊這些目錄結構,便可正常使用。spa
最後,歡迎你們加入QQ羣交流討論:code