Laravel Mail ShouldQueue не может передать переменные для просмотра - PullRequest
0 голосов
/ 11 апреля 2020

Есть много похожих вопросов, ближайшая Laravel 6 очередь прослушивателей событий, не имеющая доступа к .

php: 7,2
Laravel: 5,7

  1. Контроллер:
public function send_email(Request $request) {
    $data = $request->json()->all();
    //data: {"to":"email@to.me","msg":"test message","subject":"test subject"}

    Mail::to($data['to'])->send(new MailFromNewinc( $data['subject'], $data['msg']));

    return Response::json(array(
        'error' => false,
        'status_code' => 200
    ));
}
MailFromNewin c Отправляемый по почте:
namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class MailFromNewinc extends Mailable implements ShouldQueue
{
    use Queueable, SerializesModels;
    public $msg;
    public $header;

    public function __construct($header, $msg)
    {
        $this->msg = $msg;
        $this->header = $header;
    }

    public function build()
    {
        return $this->subject($this->header)
                ->view('emails.sendmail_from_newinc');
    }
}
sendmail_from_newin c просмотр:
<body>
{{ $header??'no header' }}
<br>
{{ $msg??'no content' }}
</body>
</html>

Результат:
субъект теста
без содержимого

Если я удаляю ShouldQueue Инструменты из почтового сообщения $ msg доступны, но если я уйду, $ msg будет нулевым. Неважно, если я установлю в компоновщике, заголовок ->with('msg', $this->msg);
$ доступен обоим путям.

ОБНОВЛЕНИЕ
Если я изменю имя переменной $header на что-то другое ( везде в почтовом ящике и в представлении) потом тоже перестает работать. Это зарезервированное слово?

Если я уйду, но поменяю тему:

return $this->subject('custom subject')->view('emails.sendmail_from_newinc');

электронное письмо все равно будет содержать тему, определенную в $header, а не «пользовательскую тему». : O

Я уже пытаюсь обработать почту в контроллере:

return (new MailFromNewinc($data['subject'], $data['msg']))->render();

, и она показывает все по порядку, все переменные на месте.

Я не знаю, как все испортилось, у меня есть другой почтовый ящик с почти такими же настройками, но с одним заголовком $ и одной пользовательской моделью в функции __construct, и все доступно в ее представлении, как и должно будет.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Хорошо, теперь я нахожу проблему: мне пришлось перезапустить работника очереди.
Я действительно не знаю, как это работает, но что-то застряло, потому что, когда я изменил даже представление в почтовой функции сборки, он по-прежнему отправляется с предыдущим представлением.
После перезапуска очереди все работает нормально.

0 голосов
/ 11 апреля 2020

Попробуете ли вы сделать это следующим образом -

public function build()
{
    $header = $this->header;
    $msg = $this->msg;
    return view('emails.sendmail_from_newinc', compact('header','msg'));
}
...