[TP3.2]实现绑定动作到一个类的功能

浏览:1943 最后更新:2014-06-29 10:26 分类:类库
用过Yii的人应该很清楚,Yii的action方法不但可以是个方法,它还可以绑定到某个类,这在某些情况下是十分有用的。正好最近在看PHP反射类,想结合实践一下,就拿TP3.2来练手了,做了一个小扩展,使得TP3.2下可以享受动作绑定到类的乐趣。

扩展名:还没想好,暂时就叫做《TP3.2绑定动作到类》
适用场景:某些情况下,需要将一个控制器下不同的动作分发给不同的人开发时,为避免同时编辑一个文件造成冲突,将动作独立成一个类,分别开发。
依赖:TP3.2 , PHP5.3+
安装过程:将附件中的类文件放到 Common\Lib\下,也就是Common模块下新建一个Lib目录,然后把类文件扔进去。

使用教程:

假设在Home模块下IndexController;
1.创建目录 Home\Actions\IndexController\
2.在控制器类中添加:    function _empty($method){
        if($action = \Common\Lib\Action::createAction($this,'\\Home\\Actions\\IndexController\\'.ACTION_NAME)){//注意,这里的路径对应第1步中创建的目录
            $action->run();
        }else{
            echo "你请求的方法不存在";//如果你之前有定义过_empty方法,把原代码放到这里就可以。
        }
    }
3.创建动作类
动作类的名字是根据你的控制器中ACTION_NAME来的,当我访问/index.php/Home/Index/test的时候,ACTION_NAME就是'test',这里的动作类名字也就是test,搞清楚这一点后,我们在第1步创建的目录下新建一个 test.class.php,而类的具体代码格式如下:<?php
namespace Home\Actions\IndexController;//命名空间参考第1步
class test extends \Common\Lib\Action{
    //必须实现run方法,在访问时会自动执行
    function run(){
        $controller = $this->getController();//通过getController()方法获取所属控制器的对象,可以访问控制器中的对象以及方法
        $controller->assign('title','这是'.CONTROLLER_NAME.'下的'.ACTION_NAME.'动作');//模板赋值,就跟控制器下的用法一样,只不过$this变成了$controller
        $controller->display();//渲染视图
    }
}
效果图:

评论( 相关
后面还有条评论,点击查看>>