将多个参数传递给事件句柄方法

时间:2018-08-24 21:01:58

标签: yii2

如何让事件知道我需要将3个参数传递给事件的handle方法。

config / web.php

'on eventname' => [EventName::class, 'handle'],

app / events / EventName.php

namespace app\events;

class EventName
{
    public function handle($arg1, $arg2, $arg3)
    {

    }
}

1 个答案:

答案 0 :(得分:0)

事件处理程序的签名不正确。事件处理程序仅接受一个参数-事件对象。如果需要将三个参数传递给处理程序,则需要创建自定义事件对象并使用其参数存储这些值。

创建自定义事件:

class MyEvent extends \yii\base\Event {

    public $arg1;
    public $arg2;
    public $arg3;
}

在事件触发器上使用它:

$this->trigger('eventname', new MyEvent([
    'arg1' => $arg1,
    'arg2' => $arg2,
    'arg3' => $arg3,
]));

并在处理程序中使用事件属性:

public function handle(MyEvent $event) {
    if ($event->arg1) {
        // ...
    }
}