Phalcon入门教程之目录结构

原文发表于: Phalcon入门教程之目录结构

不少初学Phalcon的朋友,对于以Phalcon框架为基础构建的项目,应该如何组织目录结构有点摸不着头脑。好比多模块的项目中,如何共用"libs"类库和“models”目录中模型类的状况,就有不少刚接触Phalcon朋友常常在群里问这种问题。php

咱们在翻阅Phalcon文档的时候,会看到"教程2:INVO简介"中有一个项目结构的demo,其中总结到“Phalcon不会强求应用程序使用特定的文件结构”。那么,Phalcon经过什么形式来加载这些能够任意组织的目录结构呢?html

下面以PhalconCMS的代码为例来进行讲解。git

PhalconCMS目录结构

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

  • 广州PHP高端交流群:158587573
  • Phalcon玩家群:150237524
相关文章
相关标签/搜索