专栏首页智能合约Phalcon入门教程之目录结构

Phalcon入门教程之目录结构

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

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

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

PhalconCMS目录结构

  PhalconCMS/
      app/
          backend/
              controllers/
              models/
              repositories/
              views/
          cache/
          config/
          core/
          frontend/
               controllers/
               models/
               repositories/
               views/
          helpers/
          libs/
          service/
          tasks/
      crontab/
      public/

加载目录结构

PhalconCMS中是通过“注册命名空间”的方式来加载目录结构:

$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/PhalconCMS/blob/master/app/core/loader.php

Phalcon框架还提供了另一种目录加载方式:注册文件夹,具体使用方式可以翻阅Phalcon文档。这里就只介绍命名空间的方式。

通过以上方式,我们就可以在“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”目录下,并修改注册命名空间中的路径。在调用时,还是通过命名空间的方式引入即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • zendstudio识别Phalcon语法及提示

    Marser
  • 剖析Redis过期key的删除策略

    Marser
  • Linux下安装Yii2.0

    Marser
  • Kotlin 使用 Anko 构建布局的那些事

    毕竟以往的布局都是要从 XML 中解析出来,然后再到 LayoutInfalter 里面通过 Constructor.newInstance 反射创建出来的。而...

    glumes
  • 小程序云开发 -- 云函数定时触发器配置

    新建云函数timer,小程序会新建两个文件 index.js 和 package.json

    Kindear
  • Springsecurity-oauth2之ClientDetailsService

        ClientDetailsService的实现类有InMemoryClientDetailsService和JdbcClientDetailsServi...

    克虏伯
  • 11个你可能不知道的Python库

    现在有如此之多的Python包,几乎没有人能够全盘掌握。 光是PyPI就可单独列出47,000个包! 近日,听到很多数据科学家切换到Python的消息,我不由地...

    小小科
  • 浅谈互联网那些防不胜防的人肉搜索技巧

    在互联网上撕逼的时候,总能看见那些说要人肉你,查你户口本这些威胁的语句,那么,人肉搜索真的有那么神秘吗?

    乔戈里
  • 浅谈互联网那些防不胜防的人肉搜索技巧

    在互联网上撕逼的时候,总能看见那些说要人肉你,查你户口本这些威胁的语句,那么,人肉搜索真的有那么神秘吗?接下来我为大家揭示那些人肉的方法技巧

    帅地
  • docker源码分析(6)---dockerclient

    第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

    月牙寂道长

扫码关注云+社区

领取腾讯云代金券