Laravel框架下从控制器向邮件类传递变量失败的问题求助
解决Laravel控制器向邮件类传递变量的问题
嘿,我一眼就看到你代码里的问题啦!核心问题出在welcomemail邮件类的构造函数上——你没有把控制器传过来的$email_data作为参数接收,导致类里的$email_data根本没拿到值,自然没法传递到Blade视图里。
下面是具体的修复步骤:
1. 修改邮件类的构造函数,接收传入的变量
打开App\Mail\welcomemail.php,把构造函数改成这样:
public function __construct($email_data) { $this->email_data = $email_data; $this->example = 'example'; }
原来的构造函数是空的,没有接收外部传入的$email_data,所以你之前的赋值操作里,$email_data是未定义的变量,等于白忙活一场。现在加上参数后,就能正确把控制器传来的数组赋值给类的公共属性了。
2. 确认公共属性的设置正确
你已经把$email_data和$example定义成了公共属性(public $email_data;),这一点做得很对!Laravel会自动把邮件类里的公共属性传递到对应的Blade视图中,不需要额外在build()方法里手动传递。
3. 控制器代码无需修改
你的控制器代码是完全正确的:
$email_data = array( 'first_name'=>'John', 'last_name'=>'Doe', 'email'=>'john@doe.com', 'password'=>'temp', ); Mail::to($email_data['email'])->send(new welcomemail($email_data));
这段代码正确地把构造好的数组传递给了邮件类的实例。
小提示(可选但推荐)
按照Laravel的编码规范,类名建议使用大驼峰命名法,比如把welcomemail改成WelcomeMail,这样既符合PSR规范,也能避免一些潜在的自动加载问题。
现在重新测试邮件发送,你应该能在welcomemail.blade.php里正常获取到$email_data和$example的值啦!
内容的提问来源于stack exchange,提问作者Ludo.Snel
相关产品推荐
相关产品推荐

