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

Yii 2: using Event can not pass data from trigger() to on()

我尝试在 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

好吧,你对事件 data 的用法是错误的:

读这个:http://www.yiiframework.com/doc-2.0/yii-base-event.html#$data-detail

The data that is passed to yii\base\Component::on() when attaching an event handler.

还有这个:http://www.yiiframework.com/doc-2.0/yii-base-component.html#on()-detail

关于第三个参数:

The data to be passed to the event handler when the event is triggered

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

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