首页 > 解决方案 > Laravel - 将自定义数据传递给电子邮件视图

问题描述

继上一个问题之后,我设置了一个电子邮件控制器以正确地将用户数据传递给视图。我现在正在尝试修改它,以便可以传递一些自定义数据。我的控制器看起来像这样......

namespace App\Mail;

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

class Welcome extends Mailable
{
    use Queueable, SerializesModels;

    public $email_data;

    public function __construct($email_data)
    {
        $this->email_data = $email_data;
    }

    public function build()
    {
        return $this->view('emails.welcome')->with(['email_data' => $this->email_data]);
    }
}

我正在发送这样的电子邮件......

  /* Create Data Array For Email */
        $email_data = array(
            'first_name'=>'John', 
            'last_name'=>'Doe', 
            'email'=>'john@doe.com',
            'password'=>'temp',
        );

        /* Send Email */
        Mail::to($user->email)->send(new Welcome($email_data));

这个对吗?当我尝试使用这种方法时,它似乎没有将数据传递给电子邮件模板。然后我怎样才能在视图中访问这些数据?

标签: laravellaravel-5

解决方案


你试过这种方式吗?

namespace App\Mail;

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

class Welcome extends Mailable
{
    use Queueable, SerializesModels;

    public $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    public function build()
    {
       return $this->view('emails.welcome')->with('data', $this->data);
    }
}

然后在您创建数据数组的控制器中,

$data = [
    'first_name'=>'John', 
    'last_name'=>'Doe', 
    'email'=>'john@doe.com',
    'password'=>'temp'
];

\Mail::to($user->email)->send(new Welcome($data));

请确保添加

use Mail;
use App\Mail\Welcome;

在您的控制器中。

您可以像这样访问视图中的数据

{{ $data['first_name'] }}
{{ $data['last_name'] }}
{{ $data['email'] }}
{{ $data['password'] }}

或者

您也可以为此尝试Markdown 邮件


推荐阅读