Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Laravel 5.5 on Homestead
Проблема в том, что письма методом send отправляются нормально, но если ставить в очередь, выходит ошибка (чуть ниже). Единственное отилчие всего кода в send/queue:
Mail::to($contact)->send(new $template($message));
Mail::to($contact)->queue(new $template($message));
Ошибка в таблице failed_job:
ErrorException: Undefined property: App\Mail\Test::$message in /home/vagrant/Code/ssender/app/Mail/Test.php:35 ...
Т.е. когда запускается из очереди не получает модель с сообщением как я понимаю.. Но почему? При том, что при отправке сразу все работает...
Не знаю как должно быть, но удивляет, что таблица jobs в базе пустая, хотя и из консоли видно, в и дальнейшем в failed_jobs, что в очередь задачи таки становятся.
На всякий случай app/Mail/Test.php:
namespace App\Mail;
use App\Message;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class Test extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(Message $message)
{
//
$this->message = $message;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('message_templates.test')->with([
'mailBody' => $this->message->text,
]);
}
}
Не в сети
Не в сети
Завтра попробую переименовать модель, но все же, почему все отлично работает (письма отправляются и приходят в подобающем виде) если отправлять send`ом, и только в queue выходит ошибка?
Не в сети
Не в сети
Таки попробовал уже сегодня, все равно сон отбило.. Но ничего не изменилось. Переименовал (рефактор шторма) все: файл, класс (модель), таблицу в базе, переменные все. Все работает кроме очереди. А ошибка там точно такая же. Т.е. ErrorException: Undefined property: App\Mail\Test::$message in /home/vagrant/Code/ssender/app/Mail/Test.php:35, стоит все та же Test::$message, хотя у меня в коде $message вообще нигде нет.
Не в сети
Чистил кеш.. Вот и не могу разобаться. В гугле находил несколько описаний этой проблемы (хотя у них не $message была переменная, другая, но тоже не работало так же), но все без решения остались..
Не в сети
Проблема решена!
Всего то нужно было добавить protected $message; в mailable класс (т.е. с самим именем переменной $message проблем нет, хотя в прошлых версиях ларавел похоже были, т.к. кому-то переименование помогало). Странно все же, что это нужно только для очередей, а при просто отправке работало и без этого. Найдено тут - https://laracasts.com/discuss/channels/ … queued-job
П.С. можно кинуть камнем)) в документации в примере майлабле класса все есть
Не в сети
Не в сети
Ах да, сорри, на счет переименования переменной моя неопытность сказалась. Я кеш чистил не вовремя)) т.е. в очередь уходило со старой еще, а потом я его чистил. Вернул все обратно. Потом пробовал еще раз переименовывал, при чем только лишь часть $this->message = $message; в $this->msg = $message; и тогда получал в ошибке именно $msg. Но опять таки в итогде все работает и с $message, надо было лишь объявить ее protected
Не в сети
Страницы 1