扩展机制简介

2014-09-01 15:13:29
王春生
44632
最后编辑:朱金勇 于 2023-03-20 08:54:05
分享链接
摘要:得益于PHP5.2版本以后oop语法的增强,zentaoPHP框架实现了深入彻底的扩展机制。

易软天创团队使用PHP这十几年过程中,也曾经使用过很多PHP开源的软件。在使用过程中,遇到了一个同样的问题:如果对代码做过个性化的修改,就没有办法跟着官方的版本进行升级了。做得稍好一些的比如wordpress, dupral, discuz这些程序后来有了自己的hook扩展机制。但这种扩展机制是基于动作或者事件的,只能对原有的系统做局部的修改,限制性比较强,没有办法对系统做比较深入的修改。带着这个问题,我们在设计zentaoPHP框架的时候,就特别注意框架的扩展性。得益于PHP5.2版本以后oop语法的增强,zentaoPHP框架实现了深入彻底的扩展机制。


使用zentaoPHP开发的应用都是由一个个的模块组成的。每个模块会对应到module下面的一个目录,比如user模块。每个模块按照mvc进行划分,有自己的control(控制层)、 model(模型层)和view(视图层)。同时我们还补充了其他几个辅助的概念:config(配置)、lang(语言)、 css(样式)和js(js脚本)。通过zentaoPHP框架的扩展机制,可以实现对任一层的扩展。


下面是一个扩展代码的目录结构:

user/control.php
user/model.php
user/view/{metho1.html.php, method2.html.php, ...}
user/config/config.php
user/css/{method1.css, method2.css, common.css, ...}
user/js/{method1.js, method2.js, common.js, ...}
user/ext/control/{method1.php, method2.php, ...}
user/ext/model/{extend1.php, extend2.php, ...}
user/ext/view/{method1.html.php, method2.html.php, ...}
user/ext/config/{config1.php, config2.php, ...}
user/ext/lang/zh-cn/{lang1.php, lang2.php, ...}
user/ext/lang/en/{lang1.php, lang2.php, ...}
user/ext/css/method1/{1.css, 2.css, ...}
user/ext/js/method1/{1.js, 2.js, ...}

开发者只要按照我们的扩展机制,把相应的扩展代码部署到对应的目录,即可实现对现有功能的重新定义或者新增功能。因为扩展代码和主干代码是分离的,所以就不用担心主干代码升级时会覆盖扩展代码。就可以做到放心的升级。


注意:本文档是针对禅道16.5版本之前的zentaoPHP框架,禅道最新版本的二次开发文档请参照新版:
https://devel.easycorp.cn/book/extension-new/intro-52.html

评论列表
王小川 2022-12-01 14:24:44
你好,我按照文档的方式进行了扩展,但是一直没有生效,是有什么步骤漏了吗
王小川 2022-12-01 14:37:49
已经了解 了
tim 2018-10-25 15:47:50
view层里 怎么得到用户的登录信息?
王春生 2018-10-30 07:43:24
$this->app->user
tim 2018-10-25 10:15:38
ext下control里 每个类里只能有一个方法么?
王春生 2018-10-25 14:57:03
对。
Mr.Chung 2017-02-19 16:35:04
这年头怎么还不支持composer?有想法参与一下开发~
王春生 2017-02-23 17:33:34
:),回头研究下吧。一直没有怎么关注这个。
灏曦 2016-10-31 21:43:35
数据库增加表格或者想加字段,怎么扩展?
数据库直接修改,然后mvc做相应的修改。
这两句话我不明白,能仔细说说操作步骤吗?
王春生 2016-11-02 08:19:23
view层你需要在相应的地方增加上字段,比如添加页面加上字段,详情页面,列表页面。control层可能需要对数据做检查。类似的就是这样了。
王伟 2016-08-09 10:31:17
404的报错页面在哪里? 添加了.htaccess不管用!
qiuxue 2016-07-28 16:15:53
可以请教一下要是写app接口的话在哪个模块写呢
孟小跳 2016-03-17 19:06:03
$this->app->user->account 您好 这一行是什么意思? 这个app是什么?
$project->name; 这个是什么意思?
王春生 2016-03-21 11:09:30
app是指当前的应用。
张女士 2016-03-08 11:17:58
您好!我想在BUG搜索里增加下项目的”按相关任务“搜索,并且在BUG的报表里增加项目的BUG”相关任务“统计,请问怎么做?
wolfg1969 2016-02-18 15:17:46
数据库增加表格或者想加字段,怎么扩展?
王春生 2016-02-19 08:42:03
数据库直接修改,然后mvc做相应的修改。
1/2
发表评论
评论通过审核后显示。