Прослушка событий

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Maksat1991
Сообщения: 57
Зарегистрирован: 2016.10.16, 00:15

Прослушка событий

Сообщение Maksat1991 »

В контроллере UserController в actionDelete() я инициализирую событие

Код: Выделить всё

public function actionDelete($id) {
    ...
    $this->trigger(User::DELETE);
    ...
}
При удалении юзера из БД, у меня должны происходить определенные действия. Допустим, в таблице orders в записях у которых user_id был равен удаленному юзеру, значение должно становиться NULL.
Понимаю, что можно это реализовать через БД, поставить связь CASCADE или SET NULL. Но этот пример взял с потолка, и поэтому предположим что надо решить задачу именно через Yii2.

Вопрос в том. Куда мне ставить прослушку события, чтобы после его инициализации сразу срабатывал обработчик?
Просто глупо ставить прослушку события в том же экшене, где вызывается событие. Тогда какой вообще от него толк? Легче просто нужный метод вызвать из экшена и все
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Прослушка событий

Сообщение ElisDN »

Maksat1991 писал(а): 2017.07.27, 21:44 Легче просто нужный метод вызвать из экшена и все
Значит так и делайте.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Прослушка событий

Сообщение maleks »

Maksat1991 писал(а): 2017.07.27, 21:44 Вопрос в том. Куда мне ставить прослушку события, чтобы после его инициализации сразу срабатывал обработчик?
Просто глупо ставить прослушку события в том же экшене, где вызывается событие. Тогда какой вообще от него толк? Легче просто нужный метод вызвать из экшена и все
Вы на этот контроллер прослушку можете и через DI поставить, да и вот эти статические обработчики уровня класса Event::on тоже отработают.
Но я например такие вещи запускаю по всей системе на модулях, а не контроллерах.
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Прослушка событий

Сообщение ElisDN »

А так удобнее пользоваться централизованным диспетчером событий:

Код: Выделить всё

public function actionDelete($id) {
    ...
    $this->eventDispatcher->dispatch(new UserRemoved($user));
    ...
}
чтобы не приходилось навешиваться на объекты контроллеров или модулей.
Ответить