在Laravel[php]中将变量从控制器传递到邮件
在my在Laravel[php]中将变量从控制器传递到邮件,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,在myUserController中,我有一个函数 public function userFollow($id) { $authuser = Auth::user(); $authuser->follow($id); //mail goes to the followiee ($id) $followiee = User::where('id', $id)->first(); $to = $fo
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');
}
我还创建了一个可邮寄的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]);
}
但是我得到了未定义的变量:to
如何将变量从控制器传递到邮件
更新:
FatalErrorException in Mailable.php line 442:
[] operator not supported for strings
到目前为止,我所尝试的:
UserController
Mail::to($to)->send(new MyMail($to));
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');
}
public $myTo;
public function __construct($to)
{
$this->myTo = $to;
}
public function build()
{
return $this->view('emails.welcome');
}
欢迎使用.blade.php
{{ $to }}
{{ $myTo }}
错误:
FatalErrorException in Mailable.php line 442:
[] operator not supported for strings
一种解决方案是将变量传递给
MyMail
构造函数,如下所示:
UserController
Mail::to($to)->send(new MyMail($to));
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');
}
public $myTo;
public function __construct($to)
{
$this->myTo = $to;
}
public function build()
{
return $this->view('emails.welcome');
}
欢迎使用.blade.php
{{ $to }}
{{ $myTo }}
更新:
正如@Rahul在他的回答中指出的,$to
属性可以定义为public。在这种情况下,视图将自动填充它
更新2:
您只需要为$to
变量(例如$myTo
)指定一个不同的名称,以区别于Mailable.php
中定义为public$to=[]的$to
代码>有两种方法可以使数据在视图中可用
首先,在mailable类上定义的任何公共属性都将自动提供给视图
其次,您可以通过with
方法手动将数据传递到视图,但仍然可以通过mailable类的
建造师;但是,应将此数据设置为受保护或
私有属性,因此数据不会自动提供给
模板
我尝试了这个方法,但是我得到了一个错误对App\Mail\MyMail的访问级别::$to必须是public(就像在class illighte\Mail\Mailable中一样)
为了公开,你不需要将它作为参数传递,请参阅下面解决方案的方法1我也尝试了@Rahul方法,但在Mailable.php第442行中我得到了另一个错误FatalErrorException:[]字符串不支持运算符
Awesome,将其更改为其他变量有效!因此,尝试在Laravel 5.5中的mailable的构造函数中传递自定义字符串变量会给我一个BindingResolutionException
,说“Unsolvable dependency Resolution”
,好像它认为字符串是一个依赖项一样。。。在5.5中是否只需要传递依赖项对象,还是我做错了什么?在第一个方法中,您没有在构造函数中传递$to。虽然我通过将变量传递给构造函数尝试了您的第一个方法,但它对我来说不起作用。@thehackwall我已经编写了$this->to=$to代码>在第1种方法中,但您也需要像这样传递参数,对吗<代码>公共功能构建($to)
ohhh是的,我错了