禅道二次开发——禅道zentaoPHP框架扩展机制——对模型层(model)扩展

model为模型方法,主要用来处理各种数据的查询、更新。model的扩展分为三种方式,一种是直接新增或者覆盖方法,一种是通过钩子来实现,第三种则是完全定义一个新的类,下面分别来讲述下各自实现的机制。

一、直接新增或者覆盖方法

不管是新增方法还是覆盖现有的方法,都是在extension/custom目录下创建该模块目录,并在ext/model/目录下面建立相应的以方法为名的文件。比如,我们打算对misc的model新增一个方法,叫做foo,那么只需要在extension/custom/misc/ext/model/下面建立foo.php,代码如下:

public function foo()
{ 
     return 'foo';
} 

需要说明的是这里面的定义不包含类的声明,就只是一个方法的声明。禅道框架在执行的时候,会自动将扩展目录下面的foo.php里面的代码,替换misc/model.php中的foo方法的代码。如果是新增的方法,则会追加到misc/model.php的代码中,最终生成一个合并之后的model类文件。

二、通过钩子来扩展

除了新增或者覆盖方法之外,还可以通过钩子方式来扩展。所有的钩子都是存放在ext/model/hook目录下面,文件命名规则是:方法名.扩展名.php

比如我对misc模块中的helllo方法进行钩子的扩展,在misc/ext/model/hook/下面创建hello.abc.php的文件,然后在里面实现代码就可以了。

禅道框架会把某一个方法的所有的钩子代码合并到终的代码中。

不过这种方法有很多限制,会有意想不到的行为,不建议大家使用。

三、通过类的方式来扩展

除了上面两种方式之外,model的扩展还有第三种方式,就是将所有的扩展放在一个类里面,然后通过框架的loadExtension()方法来加载。这种主要是为了解决加密文件冲突的问题。zentaoPHP框架在处理model的扩展时,会把相应的代码进行合并,但这时候问题就来了。如果对第一种方法的扩展,也就是exe/model/abc.php进行加密,就会和其他的开源的model扩展冲突。如果不加密,无法保护作者的代码。为了解决这个问题,我们特地实现了第三种扩展方法,下面我们来说明下:

3.1 在extension/custom/下对应模块的 ext/model/class 目录创建一个类,文件名的规则是插件名.class.php。

比如我们的甘特图插件,定义为project/ext/model/class/gantt.class.php,里面定义各种代码。

类名规则是{插件名}{模块名},模块名首字母大写,如ganttProject。

class ganttProject extends projectModel
{
    public function createRelationOfTasks($projectID)
    {
    }
}

注意:这个地方类是继承自projectModel,这样还可以重用原来的代码。

3.2 在ext/model/创建调用的程序。比如叫做extension/custom/project/ext/model/gantt.php

public function createRelationOfTasks($projectID)
{
    $this->loadExtension('gantt')->createRelationOfTasks($projectID);
}

通过loadExtension()方法来调用3.1里面调用的gantt.class.php里面的方法。

这样禅道框架只需要对所有的class扩展进行加密就可以了,就可以解决加密文件冲突的问题了。

免费活动:项目管理经验0元购,来奇妙敏捷之旅(青岛站) - 禅道项目管理软件

原文链接:zentaoPHP二次开发简介 - 禅道二次开发 - 禅道项目管理软件


以上就是《禅道二次开发——禅道zentaoPHP框架扩展机制——对模型层(model)扩展》的全部内容,喜欢的可以给猴哥点赞👍关注收藏,下期想了解什么知识和功能,可以在评论区留言,欢迎大家积极讨论交流!谢谢!
 

相关推荐

  1. Ubuntu 20.04安装开源

    2024-07-10 00:48:02       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 00:48:02       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 00:48:02       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 00:48:02       42 阅读
  4. Python语言-面向对象

    2024-07-10 00:48:02       53 阅读

热门阅读

  1. Linux grep技巧 结合awk查询

    2024-07-10 00:48:02       14 阅读
  2. Appium:强大的移动应用测试工具

    2024-07-10 00:48:02       19 阅读
  3. 宝塔-Linux模板常用命令-centos7

    2024-07-10 00:48:02       15 阅读
  4. 仙人掌中的SNMP检测不到服务器

    2024-07-10 00:48:02       18 阅读
  5. 算法力扣刷题 三十四【71.简化路径】

    2024-07-10 00:48:02       18 阅读
  6. yolov5:Conv类参数量计算

    2024-07-10 00:48:02       23 阅读
  7. GitHub每日最火火火项目(7.9)

    2024-07-10 00:48:02       19 阅读
  8. py基础语法简述

    2024-07-10 00:48:02       16 阅读
  9. 代码随想录算法训练营:20/60

    2024-07-10 00:48:02       19 阅读
  10. 【6-1:全链路压测】

    2024-07-10 00:48:02       19 阅读
  11. 识别色带后执行相应命令

    2024-07-10 00:48:02       17 阅读
  12. QMdiAreaQMdiAreaQMdiAreaQMdiArea

    2024-07-10 00:48:02       20 阅读