Yii 2:使用Event无法将数据从trigger()传递给on()

时间:2015-01-23 08:51:29

标签: yii2

我尝试在var_dump执行搜索后添加事件,但数据确实如此 没有通过。为什么?

触发:

class ContentSearch extends Content
{
    const EVENT_AFTER_SEARCH = 'afterSearch';

    public function search($params)
    {
        $e = new ModelEvent;
        $e->data = $this;
        $this->trigger(self::EVENT_AFTER_SEARCH, $e);
    }
}

在:

class ContentController extends Controller 
{
   public function actionIndex()
   {
        $searchModel = new ContentSearch();

        $searchModel->on($searchModel::EVENT_AFTER_SEARCH, function ($event) {
            var_dump($event->data);
            die;
        });

        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
   }
}

转储

null

1 个答案:

答案 0 :(得分:1)

嗯,你对事件data的使用有误:

阅读本文:http://www.yiiframework.com/doc-2.0/yii-base-event.html#$data-detail

  

附加事件处理程序时传递给yii\base\Component::on()的数据。

而且:http://www.yiiframework.com/doc-2.0/yii-base-component.html#on()-detail

关于第三个参数:

  

触发事件时要传递给事件处理程序的数据

无论如何,你不需要这个,你可以简单地使用$event->sender

function ($event) {
    var_dump($event->sender); // this will dump your ContentSearch model
    die;
}