天天看点

PhalconCMS源码解析之多模块

这一篇跟大家分享一下phalconcms多模块的代码组织。在phalconcms中有“前台(app/frontend目录)”和“后台(app/backend目录)”两个模块,分别对应着访客和管理员的用户群体。下面直接通过代码来分析。

在“app/core/loader.php”文件中,对“前台模块”和“后台模块”的“controllers”、“models”文件目录进行加载。这里是用的命名空间加载(registernamespaces)方式,也可以用自动加载(registerdirs)来处理。

PhalconCMS源码解析之多模块

在“app/frontend/frontendmodule.php”和“app/backend/backendmodule.php”文件中分别向di注册前台和后台模块所需的"dispathcer调度器服务"、“url服务”以及“view模板服务”。这里需要注意的是,前后台的“dispatcher调度器服务”中设置的“默认调度器”是不一样的:

同理,前后台的“url服务”中设置的"url前缀"也是不一样的。这是为了在程序中调用生成url的方法($url->get("test/test"); )时,自动根据当前模块来设置url的前缀:

在 “app/core/services.php” 文件中向di注册多模块共用的公用服务,如路由服务、数据库连接服务、缓存服务、日志服务等等。

多模块的路由服务如下:

"app/config/routes.php"中设置的路由规则如下:

以上步骤完成之后,最后在"app/public/index.php"中注册多模块:

至此,phalconcms的多模块就能正常运行了。在浏览器中访问带有“/admin/” 前缀的url,"dispatcher调度服务"就能将请求url分发到后台的控制器中("app/backend/controllers"),其他的url请求,就默认分发到前台控制器("app/frontend/controllers")。

以上贴的都是代码片断,具体代码可以参考phalconcms的源码:

同时,我也抽取了一份phalcon的示例代码仓库,phalcon多模块的示例代码已经提交上去了,后续教程的demo也会提交上去,欢迎大家star和fork:

<a href="https://github.com/kevinjay/marser-phalcon-demo">https://github.com/kevinjay/marser-phalcon-demo</a>

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

广州php高端交流群:158587573

phalcon玩家群:150237524