在我UserController
我有一个功能
public function userFollow($id)
{
$authuser = Auth::user();
$authuser->follow($id);
//mail goes to the followiee ($id)
$followiee = User::where('id', $id)->first();
$to = $followiee->email;
Mail::to($to)->send(new MyMail);
return redirect()->back()->with('message', 'Following User');
}
我还创建了一个Mailable MyMail
class MyMail extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.welcome');
}
}
在我的欢迎电子邮件中,我需要访问$to
中定义的UserController
等变量
我在MyMail Mailable中尝试了以下内容:
public function build()
{
return $this->view('emails.welcome',['to' => $to]);
}
但我得到了Undefined variable: to
如何将变量从Controller传递给Mailables?
更新
到目前为止我尝试过:
UserController中
Mail::to($to)->send(new MyMail($to));
MyMail
public $to;
public function __construct($to)
{
$this->to = $to;
}
public function build()
{
return $this->view('emails.welcome');
}
Welcome.blade.php
{{ $to }}
错误:
FatalErrorException in Mailable.php line 442:
[] operator not supported for strings
答案 0 :(得分:3)
一种解决方案是将变量传递给MyMail
构造函数,如下所示:
<强> UserController中强>
Mail::to($to)->send(new MyMail($to));
<强> MyMail 强>
public $myTo;
public function __construct($to)
{
$this->myTo = $to;
}
public function build()
{
return $this->view('emails.welcome');
}
<强> Welcome.blade.php 强>
{{ $myTo }}
<强>更新强>
正如@Rahul在他的回答中指出的那样,$to
属性可以被定义为公共属性。在这种情况下,view
将自动填充。
更新2:
您只需要为$to
变量(例如$myTo
)指定一个不同的名称,以区别于$to
中定义为Mailable.php
的{{1}}
答案 1 :(得分:2)
您可以通过两种方式为视图提供数据。
- 首先,您的mailable类中定义的所有公共属性将自动提供给视图
醇>
class MyMail extends Mailable
{
use Queueable, SerializesModels;
public $to;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($to)
{
$this->to = $to;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.welcome'); // $to will be automatically passed to your view
}
}
- 其次,您可以通过
醇>with
方法手动将数据传递到视图,但仍会通过可邮寄的类传递数据 构造函数;但是,您应该将此数据设置为受保护或 私有属性,因此数据不会自动提供给 模板。
class MyMail extends Mailable
{
use Queueable, SerializesModels;
protected $to;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($to)
{
$this->to = $to;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.welcome',['to'=>$to]);
}
}