Yii2 使用Event -2 ,如何使用事件

这里说的是通过行为的方式绑定事件

1.定义行为事件类: MyBehavior.php

<?php  
namespace myapp\frontend\code\ECM\Customer\events;  
  
use yii\db\ActiveRecord;  
use yii\base\Behavior;  
use myapp\frontend\code\ECM\Cms\controllers\IndexController;  
class MyBehavior extends Behavior  
{  
    // 其它代码  
    const EVENT_HELLO = 'myhello';  
      
    public function events()  
    {  
        return [  
            self::EVENT_HELLO => 'hello',  
        ];  
    }  
  
    public function hello($event)  
    {  
        \Yii::info($event->message,'mylog');  
    }  
}  
?>

2.定义数据格式类:

<?php  
  
namespace myapp\frontend\code\ECM\Customer\events;  
  
use Yii;  
use yii\base\Model;  
use yii\base\Event;  
/**  
 * ContactForm is the model behind the contact form.  
 */  
class MessageEvent extends Event  
{  
    public $message;  
}

3.在行为函数中绑定定义的   行为事件

<?php  
namespace myapp\frontend\code\ECM\Cms\controllers;  
  
use Yii;  
use myapp\frontend\code\ECM\BaseController;  
use myapp\frontend\code\ECM\Customer\events\MyBehavior;  
use myapp\frontend\code\ECM\Customer\events\Ha;  
use myapp\frontend\code\ECM\Customer\events\MessageEvent;  
  
class IndexController extends BaseController  
{  
     
   # 定义Event的名字  
    //const EVENT_HELLO = 'my hello';  
      
     public function behaviors()  
    {  
        return [  
             
            # 命名行为, 绑定行为事件  
            # 绑定后 会通过这个类的events()  返回所有的事件数组,然后全部绑定。  
            # 道理就是:通过行为的方式绑定对应的event , 和on函数绑定一个原理  
            'myBehavior2' => MyBehavior::className(),  
      
        ];  
    }  
      
    public function actionIndex()  
    {  
          
        #定义传递数据的格式 Event  
        $event = new MessageEvent;  
        # 赋值  
        $event->message = 'good';  
          
        # 触发事件   
        # 这里已经不需要on绑定,因为在行为中已经绑定完成  
        $this->trigger(MyBehavior::EVENT_HELLO,$event);  
          
        return $this->render('index');  
    }  
      
      
      
      
}

4.打印日志查看:tail -f  app/runtime/logs/my.log

2015-11-17 11:50:54 Array[info][mylog] good  
    in /www/web/develop/test/erp/myapp/frontend/code/ECM/Customer/events/MyBehavior.php:21  
    in /www/web/develop/test/erp/myapp/frontend/code/ECM/Cms/controllers/IndexController.php:36

已经输出对应的  $EventMessage->mesage值。

good!

发表评论

电子邮件地址不会被公开。 必填项已用*标注