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 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

0x00 概述 对从业渗透测试的人员来说,保持技能更新是非常重要的,而更新技能的过程中,需要大量的去学习、实践和总结,比较传统的学习方式是通过虚拟机安装靶机来练...

3589
来自专栏云计算教程系列

如何在Ubuntu 18.04上测试与分子的可靠角色

Ansible中的单元测试是确保角色按预期运行的关键。通过允许您指定针对不同环境测试角色的方案,Molecule使此过程更容易。使用Ansible,Molecu...

1291
来自专栏轻量级微服务

Kubernetes Pod 生命周期

Pod 的 status 属性是一个 PodStatus 对象,拥有一个 phase 字段。它简单描述了 Pod 在其生命周期的阶段。

1501
来自专栏黑白安全

W8ay 一句话管理网页端

第二版本完成了自定义命令 在include\model\PHPShell_Build_mothod.php中自定义命令即可,将自动完成编码加密过程

1612
来自专栏编程坑太多

『中级篇』手动建立一个base Image(14)

764
来自专栏云计算教程系列

如何在CentOS上创建Kubernetes集群

在本教程中,您将使用Ansible和Kubeadm从头开始设置Kubernetes集群,然后给它部署一个容器化的Nginx程序。

5.9K12
来自专栏编程坑太多

『高级篇』docker之DockerSwarm的集群环境搭建(28)

PS:以上就完成高可用的docker swarm的集群环境,其实真心比其他的简单。

1232
来自专栏编程坑太多

『中级篇』docker之运行nginx跳转到本地的jar并配置https(番外篇)(80)

PS:基本的nginx容器配置秘钥和key,跳转返回的时候,访问java容器的IP。

2304
来自专栏散尽浮华

Mesos+Zookeeper+Marathon的Docker管理平台部署记录(2)--负载均衡marathon-lb

之前介绍了Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)的操作,多余的废话不说了,下面接着说下在该集群环境下的负载均衡ma...

4589
来自专栏DannyHoo的专栏

Cocoapods安装和使用

删除命令:gem sources --remove https://rubygems.org/

1052

扫码关注云+社区

领取腾讯云代金券