Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 24.01.2018 20:47:01

Mail..->send работает, Mail..->queue уходи в failed.

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,
        ]);
    }
}

Не в сети

#2 24.01.2018 21:10:18

Re: Mail..->send работает, Mail..->queue уходи в failed.

Message это точно модель?

Еще, здесь может быть конфликт, т.к. Mailable передает свою переменную $message, поэтому попробуй заменить название на что-нибудь другое, вроде $messageModel. Плюс, будет в какую сторону копать (встроеннубю $message или $messageModel).

Не в сети

#3 24.01.2018 21:34:12

Re: Mail..->send работает, Mail..->queue уходи в failed.

Завтра попробую переименовать модель, но все же, почему все отлично работает (письма отправляются и приходят в подобающем виде) если отправлять send`ом, и только в queue выходит ошибка?

Не в сети

#4 24.01.2018 21:40:05

Re: Mail..->send работает, Mail..->queue уходи в failed.

Ну выглядит все так, как-будто проблема с сериализацией модели. Пробуй.

Не в сети

#5 24.01.2018 22:00:23

Re: Mail..->send работает, Mail..->queue уходи в failed.

Таки попробовал уже сегодня, все равно сон отбило.. Но ничего не изменилось. Переименовал (рефактор шторма) все: файл, класс (модель), таблицу в базе, переменные все. Все работает кроме очереди. А ошибка там точно такая же. Т.е. ErrorException: Undefined property: App\Mail\Test::$message in /home/vagrant/Code/ssender/app/Mail/Test.php:35, стоит все та же Test::$message, хотя у меня в коде $message вообще нигде нет.

Не в сети

#6 24.01.2018 22:05:54

Re: Mail..->send работает, Mail..->queue уходи в failed.

Может кэш? Потому что если ты переименовал переменную, то он ругается на внутреннюю $message, а это ну очень маловероятно.

Не в сети

#7 25.01.2018 07:33:03

Re: Mail..->send работает, Mail..->queue уходи в failed.

Чистил кеш.. Вот и не могу разобаться. В гугле находил несколько описаний этой проблемы (хотя у них не $message была переменная, другая, но тоже не работало так же), но все без решения остались..

Не в сети

#8 25.01.2018 08:40:14

Re: Mail..->send работает, Mail..->queue уходи в failed.

Проблема решена!
Всего то нужно было добавить protected $message; в mailable класс (т.е. с самим именем переменной $message проблем нет, хотя в прошлых версиях ларавел похоже были, т.к. кому-то переименование помогало). Странно все же, что это нужно только для очередей, а при просто отправке работало и без этого. Найдено тут - https://laracasts.com/discuss/channels/ … queued-job
П.С. можно кинуть камнем)) в документации в примере майлабле класса все есть neutral

Не в сети

#9 25.01.2018 10:36:53

Re: Mail..->send работает, Mail..->queue уходи в failed.

Но ты же сказал, что переименовал эту переменную и все равно получал ошибку о переменной $message, а не о новой переменной. В таком случае, речь могла идти только о внутренней переменной $message, которая вообще никак не объявляется в Mailable.

Не в сети

#10 25.01.2018 10:46:49

Re: Mail..->send работает, Mail..->queue уходи в failed.

Ах да, сорри, на счет переименования переменной моя неопытность сказалась. Я кеш чистил не вовремя)) т.е. в очередь уходило со старой еще, а потом я его чистил. Вернул все обратно. Потом пробовал еще раз переименовывал, при чем только лишь часть $this->message = $message; в $this->msg = $message; и тогда получал в ошибке именно $msg. Но опять таки в итогде все работает и с $message, надо было лишь объявить ее protected

Не в сети

Подвал раздела