对控制层(control)扩展

2021-09-27 11:02:36
admin
1329
最后编辑:admin 于 2021-09-28 18:23:47

对现有模块的 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 一个方法只能有一个扩展。