发送电子邮件时 Laravel 8 刀片模板中的“未定义变量”

net*_*djw 1 php laravel laravel-blade

在我的 Laravel 8 项目中,我尝试发送 HTML 电子邮件,但Undefined variable出现错误。

我的控制器中有此代码:

// here the $client has a model value
Mail::to($client)->send(new ClientCreated($client));
Run Code Online (Sandbox Code Playgroud)

在我的app/Mail/ClientCreated.php文件中:

<?php

namespace App\Mail;

use App\Client;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class ClientCreated extends Mailable
{
    use Queueable, SerializesModels;

    private $client;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(Client $client)
    {
        $this->client = $client;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        // here the $this->client has a model value
        return $this->view('emails.client.created');
    }
}
Run Code Online (Sandbox Code Playgroud)

最后在我的resources/views/emails/client/created.blade.php我有这个代码:

<p>Dear{{ $client->name }}!</p>
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

Undefined variable: client (View: /home/vagrant/Code/myproject/laravel/resources/views/emails/client/created.blade.php)
Run Code Online (Sandbox Code Playgroud)

我阅读了文档并在 Stackoverflow 上搜索,但没有找到任何帮助。

知道我做错了什么吗?

Arm*_*min 10

如果你正确地将变量传递给视图,但仍然不起作用,请尝试在控制台中重新启动队列:

php artisan queue:restart
Run Code Online (Sandbox Code Playgroud)

  • 在这个问题上浪费了这么多时间之后,这终于为我解决了!谢谢 :) (6认同)

lag*_*box 6

您应该$client公开而不是私有:

 public $client;
Run Code Online (Sandbox Code Playgroud)

“您可以通过两种方式将数据提供给您的视图。首先,您的可邮寄类中定义的任何公共属性都将自动提供给视图”

Laravel 8.x 文档 - 邮件 - 编写邮件 - 查看数据 - 通过公共属性

另一种方法是调用with

$this->view(...)->with('client', $this->client);
Run Code Online (Sandbox Code Playgroud)

“如果您想在将电子邮件数据发送到模板之前自定义其格式,您可以通过该with方法手动将您的数据传递给视图。”

Laravel 8.x 文档 - 邮件 - 编写邮件 - 查看数据 - 通过with方法

如果您不想更改$client为,public则使用第二种方法。