Laravel-将自定义数据传递到电子邮件视图



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

namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;
use IlluminateContractsQueueShouldQueue;
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));

这是正确的吗?当我尝试使用这种方法时,它似乎并没有将数据传递到电子邮件模板。然后我如何访问视图中的这些数据?

你试过这种方法吗?

namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;
use IlluminateContractsQueueShouldQueue;
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 AppMailWelcome;

在您的控制器中。

你可以像这个一样访问你视图中的数据

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

你也可以尝试这个的Markdown邮件

您不需要这个部分->with(['email_data' => $this->email_data]),因为如果属性是公共的,您可以在视图中访问它。

你正在传递一个数组,所以你必须访问这样的值:

$email_data['email'] // ...

通过视图传递数据有两种方法。首先,在mailable类中定义的任何公共防御都会自动通过视图。

<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;
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>

对于具有受保护和私有属性的变量,可以使用方法通过视图传递数据

namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;
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>

最新更新