13.3 控制器扩展
匿名 · 更新于 2013/12/26
系统内置的Action基础类完成的功能有限,有时候,我们在项目经常需要扩展一个用于项目的公共Action,又或者我们需要为某些特殊应用增加功能,这些都可以使用控制器扩展来实现。
控制器扩展接口
系统Action类提供了一个初始化方法_initialize接口,可以用于扩展需要,_initialize方法会在所有操作方法调用之前首先执行,用法:| _initialize 控制器初始化方法 | |
|---|---|
| 用法 | _initialize() |
| 参数 | 无 |
| 返回值 | 无 |
| 相关方法 | 可以和getActionName方法配合使用 |
控制器扩展只需要继承Action,例如:
Class ExtendAction extends Action{Public function _initialize(){// 初始化的时候检查用户权限$this->checkRbac();}// 检查用户权限protected function checkRbac() {// 这里是具体的检测代码}// 添加新的上传操作方法protected function upload() {// 这里是具体的上传实现代码}}
Hack方法
新版提供了两个hack方法用于对模块和操作方法进行扩展,这些hack函数可以定义到项目的公共函数库里面。| __hack_module 模块hack函数 | |
|---|---|
| 用法 | __hack_module () |
| 参数 | 无 |
| 返回值 | 如果返回一个对象,则会继续执行该对象的对应当前操作的方法。否则,将在执行完__hack_module函数后中止当前操作的执行,但不影响app_end标签的行为执行。 |
下面是一个定义的示例:
function __hack_module(){if ('Test'== MODULE_NAME){$module = New MyAction();return $module;}}
| __hack_action 操作hack函数 | |
|---|---|
| 用法 | __hack_action () |
| 参数 | 无 |
| 返回值 | 无 |
下面是一个定义的示例:
function __hack_action(){if ('Test'== ACTION_NAME){echo 'Hello,Just Test! You can do anything here…';}}
