Как использовать событие ( человеческим языком ) ?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
oughtem2
Сообщения: 34
Зарегистрирован: 2019.10.26, 20:50

Re: Как использовать событие ( человеческим языком ) ?

Сообщение oughtem2 »

для отправки рассылок создал отдельный компонент mailers. отправляю письма так: Yii::$app->mailers->sendMultiple($messages). Мне надо, чтоб при отправке каждого из них выполнялась моя функция, записывающая данные об отправке этого письма в базу. У меня есть экшен в контроллере, в котором я запускаю отправку писем:
public function actionRun(){
$messages = ....
Yii::$app->mailers->sendMultiple($messages)
}
Как в данном случае вызвать метод myMetodReadToBd() после отправки каждого отдельного письма, чтоб сделать описанное выше исключительно при работе через компонент mailers?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как использовать событие ( человеческим языком ) ?

Сообщение ElisDN »

oughtem2 писал(а): 2021.12.22, 18:21 Как в данном случае вызвать метод myMetodReadToBd() после отправки каждого отдельного письма, чтоб сделать описанное выше исключительно при работе через компонент mailers?
Отнаследовать свой mailer от класса Component и в нём триггерить событие:

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

class Mailer extends Component
{
    const MESSAGE_SENT = 'emailSent';

    public function send($message) {
        ...
        $this->trigger(self::MESSAGE_SENT, new MessageEvent(['message' => $message]));
    }
}
Ответить