对控制层(control)扩展

2014-09-01 15:13:29
王春生
45015
最后编辑:王春生 于 2014-09-01 16:50:47
分享链接
摘要:对现有模块的control层的扩展有两种,一种是覆盖现有的方法,一种是增加新的方法。下面我们来看下如何进行扩展。

对现有模块的control层的扩展有两种,一种是覆盖现有的方法,一种是增加新的方法。下面我们来看下如何进行扩展。

一、文件命名规则

无论是覆盖现有的方法,还是新增方法,扩展文件都是以方法名为名,保存到ext/control目录下面。文件名都是小写。

比如以user模块为例,我们想重新定义它的注册逻辑,只需要在module/user/ext/control下面创建register.php,然后实现代码即可。

如果我们想为user模块增加一个开放登录功能,比如叫做oauth,只需要在module/user/ext/control下面创建oauth.php,然后实现代码即可。

二、独立扩展代码

在对control层进行扩展的时候,可以完全独立,也可以重用主干代码在control里面定义的方法。下面的例子是完全的独立的。

class user extends control
{
    public function register()
    {
        $this->view->header->title = 'getsid';
        $this->view->sid = session_id();
        $this->view->test = $this->misc->test();
        $this->display();
    }
} 
请大家注意类名的定义:user,从control基类派生而来。这样的定义是完全独立的。

三、继承扩展

上面的例子是独立的扩展,但很多时候还想重用禅道原来的代码,则可以通过继承扩展的方式来实现。
include '../../control.php'; 
class myUser extends user
{
    public function register()
   {
        ....
        $this->process()    // process方法是在../../control.php里面定义
   }
}

首先需要手工包含../../control.php,然后类名定义是 myUser(my + 模块名),从user类派生而来,这样就可以在register方法里面调用../../control.php里面定义的process方法了。

四、限制

由于框架加载机制的限制,control一个方法只能有一个扩展。

评论列表
胖哥 2022-05-15 21:45:05
想重写project control中的create方法,直接在创建了ext/control/create.php,里面很多方法无法使用,连$this->post_qc都无法使用。
21:36:19 Uncaught Error: Using $this when not in object context in D:\xampp\zentao\module\project\ext\control\create.php:5
Stack trace:
#0 D:\xampp\zentao\framework\base\helper.class.php(195): include()
#1 D:\xampp\zentao\framework\base\router.class.php(1645): baseHelper::import('D:\\xampp\\zentao...')
#2 D:\xampp\zentao\www\index.php(72): baseRouter->loadModule()
#3 {main}
thrown in D:\xampp\zentao\module\project\ext\control\create.php on line 5 when visiting project-create
王春生 2022-05-16 08:40:19
请仔细看我们的扩展文档。
元曦 2022-04-02 18:21:30
如果我再user模块下的ext文件夹下面有多个扩展类,我其中一个扩展类引入另外一个扩展类的方法,总是提示我Fatal error: Cannot declare class user, because the name is already in use in F:\phpstudy_pro\WWW\cczq\cczq_pms\module\user\control.php on line 949

18:15:40 Cannot declare class user, because the name is already in use in F:\phpstudy_pro\WWW\cczq\cczq_pms\module\user\control.php on line 949 when visiting user-logoutex
但是实际上我并没有实例化,不知道怎么回事,求大佬帮助
王春生 2022-04-06 20:27:17
有重复定义。
元曦 2022-03-16 16:43:11
如果我想在新的模块中,在control层增加一个基类(如:新增个newcommon文件夹,下面写一个control文件,里面有个baseControl方法,它继承了control),让所有新的模块的控制器继承这个新的基类方法,baseControl,这种如何实现?
MIKE 2022-03-02 00:17:55
class user extends control 的写法不对,无法调用到;
要改成 class myblock extends block
牛尊堡 2021-06-30 10:43:05
针对project/control.php 的create进行扩展重写。 发现$this->fetch('project','tips',"projectID=$$projectID") 没有结果。执行后结果为空。
创建迭代后的弹出框异常。
王春生 2021-07-01 09:44:36
跟踪代码,看看代码执行到什么地方,有什么错误。
牛尊堡 2021-07-01 13:40:42
执行到control.class.php->fetch()的ob_get_contents()。 输出为空
call_user_func_array() expects parameter 1 to be a valid callback,class 'myproject' does not have a method 'tips'
MIKE 2022-03-01 01:51:17
请问解决了吗,如何解决的
sric 2021-06-23 15:43:32
我要用java代码进行对禅道的扩展,可以实现吗?
王春生 2021-06-25 08:36:43
从理论上讲可以,但需要对禅道的框架结构非常了解,很难。
小小 2021-06-02 15:25:42
请教一下 项目- 任务 - 报表,关于报表是用canvas来实现的,但canvas是基于js才能实现,请问js在哪里引入的呢?还请指点一下谢谢。
王春生 2021-06-03 09:09:33
可以查看源代码,看js引入的路径。
报表组件应该是在zui框架里面的。
czl 2021-05-31 08:33:19
新扩展了control,权限也维护好了,但还是不能使用
08:32:18 ERROR: the module task has no batchrelationshiptask method in /usr/share/nginx/zentaopms/framework/base/router.class.php on line 1658, last called by /usr/share/nginx/zentaopms/www/index.php on line 72 through function loadModule.
in /usr/share/nginx/zentaopms/framework/base/router.class.php on line 2234 when visiting /index.php?m=task&f=batchRelationshipTask&projectID=102&taskID=825
王春生 2021-05-31 21:10:51
注意文件的大小写。
Archon 2020-05-29 17:12:06
请问,如果需要在验证关闭Bug的时候提交测试的数据,此页面如何添加一个模块用来保存验证的测试数据做验证关闭的证据?

也就是我需要在验证关闭时能上传附件,以确保测试人员测试的结果正确性
王春生 2020-06-02 10:58:38
你需要先搞清楚我们的mvc结构。搞清楚了就知道在什么地方做。
zt 2020-01-07 10:14:51
在module/user/ext/control下面创建register.php,然后怎么访问register.php中的方法呢?
王春生 2020-01-07 11:10:17
参考我们其他的方法。
1/3
发表评论
评论通过审核后显示。