簡體   English   中英

Laravel Mail ShouldQueue 無法傳遞變量查看

[英]Laravel Mail ShouldQueue unable to pass variables to view

類似的問題還有很多,最接近的Laravel 6 Event Listener Mailable Queue unable to access

php:7.2
Laravel:5.7

  1. Controller:
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
    ));
}
  1. MailFromNewinc 可郵寄:
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');
    }
}
  1. sendmail_from_newinc 視圖:
<body>
{{ $header??'no header' }}
<br>
{{ $msg??'no content' }}
</body>
</html>

結果:
考試科目
無內容

如果我從可郵寄的 $msg 中刪除ShouldQueue實現是可訪問的,但如果我離開,$msg 是 null。 無論我是否在 builder ->with('msg', $this->msg);
$header 可以通過兩種方式訪問。

更新
如果我將變量名稱$header更改為其他名稱(可郵寄和視圖中的任何位置),它也會停止工作。 是保留字嗎?

如果我離開但改變主題:

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

email 仍然帶有在$header中定義的主題,而不是“自定義主題”。 :O

我已經嘗試在 controller 中渲染郵件:

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

它按順序顯示所有內容,所有變量都在適當的位置。

我不知道我是怎么搞砸的,我有另一個郵件,具有幾乎相同的設置,但在 __construct function 中有一個 $header 和一個自定義 model,並且所有內容都可以在其視圖中訪問。

好的,現在我發現了問題:我不得不重新啟動隊列工作者。
我真的不知道它是如何工作的,但是有些東西卡住了,因為當我更改了可郵寄版本 function 中的視圖時,它仍然使用以前的視圖發送。
隊列重啟后一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM