使用CAction类的事件

虽然有很多好的文章介绍怎么使用事件和怎么把它们放到你的组件中,但是没有(我认为)文章介绍怎么在你的控制器中使用以下方法配置 CAction 类。

事件通常按以下方式使用:

  1. 在你的组件中声明事件并添加它的方法(即 function onClick($event))
  2. 将事件附加到事件处理程序(event handlers)(即 $object->onClick = array($handleObject, 'staticMethod');)
  3. 在你的组件中触发它来调用它的所有处理程序(即 $this->raiseEvent('onClick', $event)).注意,对于处理程序来说,你可以写一个对象的静态方法,一个对象的方法,创建一个函数(create_function),甚至可以直接附加一个函数(自 PHP 5.3)

如果我们查看 Ccomponent 的魔术方法 __set, 我们就会发现事件处理程序通常像属性一样设置。考虑到这些,以下是我的关于设置 CAction 类的事件处理程序的快速提示,我认为这是比较好的组织你的控制器的代码方法。

CAction 类

先写一个简单的 CAction 类的例子 EmyAction.php:

class EMyAction extends CAction{
    public function onTest($event){
        $this->raiseEvent('onTest', $event);
    }
    public function run() {
        $event = new CEvent($this);
        $this->onTest($event);
    }
}

控制器

现在在我们的控制器中写一个事件处理程序的方法并且配置这个 action(假设在 controllers文件夹下的actions 文件夹下)

// 我们的事件处理程序的方法,为简单起见我们写在控制器里面
public function eventHandlerMethod($event)
{
    echo 'TESTING Handler';
}
 
// 声明 actions 和事件处理程序
public function actions()
{
    return array(
        // test 是动作的名称 <controller/action>
        'test'=>array(
            'class'=>'actions.EMyAction',
            'onTest'=>array($this,'eventHandlerMethod')
        )
    );
}

现在所有代码都以完成,你可以使用任何浏览器来测试结果。

原文地址:http://www.yiiframework.com/wiki/255/using-events-with-caction-classes/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值