Прослушивание и запуск события в особую дату в Ларавеле
Я пытаюсь сделать скрипт уведомления для собственного использования. Вот то, чего я пытаюсь достичь. Когда пользователь регистрируется, я беру его адрес электронной почты и дату уведомления, которую он дает, и сохраняю их в таблице профиля. Теперь в указанную дату уведомления приложение автоматически отправит им электронное письмо. Пока что моя идея сделать это легко - использовать "Событие"; Но, пожалуйста, не стесняйтесь поправлять меня, если я ошибаюсь. Исходя из моей идеи, вот что я планирую сделать; для электронной почты я мог бы зарегистрировать класс в качестве данных для события.
Но мой первый вопрос: как я могу прослушать событие для этой даты уведомления?
И я хочу отправлять им уведомления каждый месяц, поэтому после отправки электронного письма я добавлю один месяц к старой дате уведомления, указанной пользователем. Добавление одного месяца будет простым, поскольку я использую "Углерод" на входе, сохраняя дату уведомления.
Итак, мой второй вопрос: после обновления даты уведомления, как я могу прослушать это событие еще раз?
И, наконец, если у меня есть 100 пользователей, и я хочу отправить одно и то же уведомление всем о дате их уведомления и конкретной дате, например, в начале каждого месяца. Как я могу сделать это периодически?
Пожалуйста, не стесняйтесь давать любые предложения, которые могут быть легко реализованы вместо того, что я думаю.
1 ответ
Я чувствую, что то, что вы пытаетесь достичь, лучше сделать с помощью запланированной команды. Некоторые люди делают это, создавая задания cron, которые по расписанию будут вызывать определенную функцию.
В Laravel 4 (я предполагаю, что это то, что вы используете), есть большой пакет от indatus, называемый dispatcher. Я не буду вдаваться в подробности о том, как его настроить, поскольку у них есть отличная документация, но вы можете создавать запланированные задания, где будете проверять каждые x дней / минут и т. Д. Это также более читабельно.
Диспетчер делает его очень читабельным по сравнению с заданиями cron, например:
`` `использовать Indatus\Dispatcher\Scheduling\ScheduledCommand; использовать Indatus\Dispatcher\Scheduling\Schedulable; использовать Indatus\Dispatcher\Drivers\DateTime\Scheduler;
класс MyCommand расширяет ScheduledCommand {
//your command name, description etc.
public function schedule(Schedulable $scheduler)
{
//every day at 4:17am
return $scheduler
->daily()
->hours(4)
->minutes(17);
}
}
`` `
Эта функциональность была включена в laravel 5, поэтому вам не нужно устанавливать дополнительные пакеты, если вы используете эту версию.
Надеюсь, поможет.
[EDIT:] Отличное видео Джеффри Вей о том, как настроить и использовать диспетчер, можно найти здесь.