Yii: лучшие практики нескольких мероприятий

События в Yii выглядят великолепно, но несколько вопросов по-прежнему будят меня ночью:

  • Если я создаю событие и создаю несколько классов обработчиков событий PHP в цепочке, могу ли я передавать между ними разные данные (например, возвращаемое значение)?
    Предназначено ли мероприятие для этой цели? Насколько я понимаю, событие, по-видимому, является односторонним способом уведомления, и передача данных не является обычной практикой, верно?

    Скажем так:

    У меня есть 3 обработчика: Handler1, Handler2, Handler3 выполняется в этом порядке. Каждый обработчик объединяет некоторые строковые данные.
    Могу ли я передать связанное ядро ​​между обработчиками, и предполагается ли, что обработчики это делают?

  • Является ли использование цепочки событий в обработчике событий хорошей практикой?

0

Решение

Вы правы, что система событий изначально была разработана (или, по крайней мере, документирована) как система уведомлений только для чтения. Тем не менее, можно сделать то, что вы хотите, создав собственное событие подкласса, которое определяет открытое свойство для данных, которые вы хотите передать.

Например, начните с пользовательского класса событий:

class MyEvent extends \yii\base\Event
{
public $data;
}

Запустить это событие:

$event = new MyEvent([
'data' => 'hello world'
]);

$this->trigger('myEvent', $event);

echo "After passing through the entire event chain, data is now: " . $event->data;

И добавьте поведения (или обработчики), которые его слушают:

public function onMyEvent($event)
{
$event->data .= ', goodbye world';
}

Если все прошло хорошо, это должно закончиться эхом hello world, goodbye world

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]