У меня есть класс уведомлений Laravel, который отправляет электронную почту группе получателей. Без ShouldQueue
это прекрасно работает при использовании объекта $request
, который я передаю в конструктор класса уведомлений :
class MassNotification extends Notification {
public function __construct($request)
{
$this->request = $request;
}
Это происходит от контроллера вот так:
\Notification::send($emps, new MassNotification($request));
Мне нужно поставить в очередь эти электронные письма, чтобы освободить пользователя для продвижения, поэтому я реализую ShouldQueue
:
class MassNotification extends Notification implements ShouldQueue {}
На этом этапесообщения терпят неудачу со следующей ошибкой:
Сериализация 'Closure' не разрешена
Выполнение небольшого SO поиска , и здесь говорит мне, что это связано с невозможностью сериализации объекта $request
. Хорошо, я следую совету и изменяю конструктор, чтобы получить массив данных, которые мне нужны:
public function __construct($request)
{
$this->request = $request->all();
}
Я изменяю код в моем toMail()
, чтобы он соответствовал нотации массива и нотации объекта, и этопроисходит сбой каждый раз , прежде чем он попадает в метод toMail()
с:
Вызов функции-члена has () имеет значение null по адресу /vagrant/app/Notifications/MassNotification.php: 44
Однако, это указывает на мой код - но у меня больше нет кода has()
, он никогда не доходит до этой строки - он терпит неудачу в Illuminate\\Notifications\\Channels\\MailChannel->send()
Я полагаю.
Я пытался полностью вывести массив запросов и просто использовать переменные (например, $this->message
, $this->subject
и т. Д.), Но Notification, похоже, ищет объект для использования has()
каждый раз.
Я предполагаю, что упускаю что-то очень простое, потому что это нельзя сломать обоими способами. Я был бы благодарен за любой свет на этом.