Laravel - 将自定义数据传递给电子邮件视图
Posted
技术标签:
【中文标题】Laravel - 将自定义数据传递给电子邮件视图【英文标题】:Laravel - Pass custom data to email view 【发布时间】:2018-08-02 15:26:38 【问题描述】:继上一个问题之后,我设置了一个电子邮件控制器,以正确地将用户数据传递给视图。我现在正在尝试修改它,以便可以传递一些自定义数据。我的控制器看起来像这样......
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));
这是正确的吗?当我尝试使用这种方法时,它似乎没有将数据传递给电子邮件模板。然后如何在视图中访问这些数据?
【问题讨论】:
你不需要这部分->with(['email_data' => $this->email_data])
如果属性是公开的,你可以在视图中访问它
我试过没有那部分,但在视图中访问我得到未定义的变量:电子邮件。试过 $email 和 $email_data->email
试试这个$email_data['email']
试试return $this->view('emails.welcome', compact('email_data'))
@Maraboc - 完美,解决了!
【参考方案1】:
你试过这种方式吗?
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 mails这个
【讨论】:
Markdown 是我的最佳选择【参考方案2】:您不需要这部分->with(['email_data' => $this->email_data])
,因为如果该属性是公开的,您可以在视图中访问它。
而且您正在传递一个数组,因此您必须像这样访问值:
$email_data['email'] // ...
【讨论】:
【参考方案3】:有两种方法可以通过视图传递数据。首先,在 mailable 类中定义的任何公共防御都会自动通过视图。
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class Welcome extends Mailable
use Queueable, SerializesModels;
public $firstName;
public $lastName;
public $email;
public $password;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($firstName, $lastName, $email, $password)
$this->firstName = $firstName;
$this->lastName = $lastName;
$this->email = $email;
$this->password = $password;
/**
* Build the message.
*
* @return $this
*/
public function build()
return $this->view('emails.orders');
在刀片视图中
<div>
First Name: $firstName
Last Name: $lastName
Email: $email
Password: $password
</div>
对于具有受保护和私有属性的变量,可以使用 with 方法通过视图传递数据
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class Welcome extends Mailable
use Queueable, SerializesModels;
protected $firstName;
protected $lastName;
protected $email;
protected $password;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($firstName, $lastName, $email, $password)
$this->firstName = $firstName;
$this->lastName = $lastName;
$this->email = $email;
$this->password = $password;
/**
* Build the message.
*
* @return $this
*/
public function build()
return $this->view('emails.orders')->with([
'first_name'=> $this->firstName,
......
]);
在刀片视图中
<div>
First Name: $firstName
Last Name: $lastName
Email: $email
Password: $password
</div>
【讨论】:
以上是关于Laravel - 将自定义数据传递给电子邮件视图的主要内容,如果未能解决你的问题,请参考以下文章