Phalcon入门教程之目录结构

简介: 很多初学Phalcon的朋友,对于以Phalcon框架为基础构建的项目,应该如何组织目录结构有点摸不着头脑。比如多模块的项目中,如何共用"libs"类库和“models”目录中模型类的情况,就有很多刚接触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”目录下,并修改注册命名空间中的路径。在调用时,还是通过命名空间的方式引入即可。

总结

就像文档中说的“ Phalcon不会强求应用程序使用特定的文件结构 ”,我们可以根据业务需要,或者开发习惯,自由组织我们的项目目录结构。只需要通过"Autoloader"注册这些目录结构,即可正常使用。

最后,欢迎大家加入QQ群交流讨论:

  • 广州PHP高端交流群:158587573
  • Phalcon玩家群:150237524
目录
相关文章
|
Java 编译器 Linux
Makefile教程(入门介绍)
Makefile教程(入门介绍)
125 0
|
6月前
vscode 生成项目目录结构 directory-tree 实用教程
vscode 生成项目目录结构 directory-tree 实用教程
405 2
|
SQL 关系型数据库 MySQL
PHP-简单项目引起的大麻烦--【白嫖项目】
PHP-简单项目引起的大麻烦--【白嫖项目】 这是我的CSDN 的文章 转过来,可能有些许错误。请留言
|
编译器 Go Windows
LiteIDE简单使用
LiteIDE简单使用
308 0
LiteIDE简单使用
|
前端开发 Java Linux
Hexo、Jekyll、Sphinx、mkdocs、docsify等静态博文档汇总
Hexo、Jekyll、Sphinx、mkdocs、docsify等静态博文档汇总
256 0
Hexo、Jekyll、Sphinx、mkdocs、docsify等静态博文档汇总
|
存储 缓存 前端开发
Laravel 目录结构介绍
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
189 0
|
Ubuntu 程序员 Linux
SVN版本管理工具入门教程(一)
SVN版本管理工具入门教程(一)
554 0
SVN版本管理工具入门教程(一)
|
弹性计算 Kubernetes Java
k8s实战之手动部署PHP项目和Java项目
对k8s刚入门的朋友而言,光搭建k8s集群是不够的,我们需要更多的理论加实战,才能更好的掌握k8s的好处,当我们成功部署一个k8s集群之后,我们需要在实际项目中进行应用,本文简单的介绍了当前比较主流的PHP项目和Java项目的部署。
k8s实战之手动部署PHP项目和Java项目
|
容器
Phalcon如何创建多模块并能进行访问 《Phalcon入坑指南系列 四》(2)
Phalcon如何创建多模块并能进行访问 《Phalcon入坑指南系列 四》
184 0
Phalcon如何创建多模块并能进行访问 《Phalcon入坑指南系列 四》(2)