
本文档旨在帮助 Laravel 8 开发者解决在控制器中创建邮件类时,如何将参数传递到邮件视图中的问题。通过修改邮件类的构造函数,并在build方法中传递数据,最终在 Blade 模板中使用这些数据,从而实现动态邮件内容生成。本文将提供详细的代码示例和步骤,帮助开发者快速掌握该技巧。
传递数据到邮件视图
在 Laravel 中,将数据从控制器传递到邮件视图的关键在于正确地使用邮件类的构造函数和 build 方法。以下是详细的步骤和代码示例:
1. 修改邮件类构造函数
首先,需要修改邮件类的构造函数,使其能够接收来自控制器的数据。在 App/Mail/RegisterMail 类中,添加一个私有属性 $data 用于存储数据,并在构造函数中接收这个数据。
<?php
namespace App/Mail;
use Illuminate/Bus/Queueable;
use Illuminate/Contracts/Queue/ShouldQueue;
use Illuminate/Mail/Mailable;
use Illuminate/Queue/SerializesModels;
class RegisterMail extends Mailable
{
use Queueable, SerializesModels;
private $data;
public function __construct($data)
{
$this->data = $data;
}
public function build()
{
return $this->markdown('emails.register', ['data' => $this->data])
->subject('Register SLeAgro Agricultural Product Distribution System');
}
}
登录后复制
2. 在 build 方法中传递数据
在 build 方法中,将 $data 数组传递给邮件视图。通过将 $data 数组作为第二个参数传递给 markdown 方法,可以在视图中使用这个数组中的数据。
3. 修改控制器代码
在控制器中,创建邮件类实例时,将需要传递的数据作为参数传递给构造函数。
$data1 = [
'email' => $request->email,
'password' => $code
];
$mail = new RegisterMail($data1);
Mail::to($request->email)->send($mail);
登录后复制
4. 在 Blade 模板中使用数据
现在,可以在 Blade 模板 emails.register.blade.php 中使用 $data 变量访问传递的数据。
@component('mail::message')
# Welcome SleAgro Agricultural Product Management System
you can loging to the system using following credetail .
User name : {{ $data['email'] }}
<br>
password : {{ $data['password'] }}
@component('mail::button', ['url' => 'http://127.0.0.1:8000/login'])
Login
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent
登录后复制
注意事项
- 确保在邮件类中声明了 $data 属性为 private 或 protected,以保证数据的封装性。
- 在 Blade 模板中使用 $data[‘key’] 访问数据时,请确保 $data 数组中存在该键,否则可能会导致错误。
- 如果需要传递复杂的数据结构(例如对象),可以在构造函数中接收对象,并在 Blade 模板中使用对象属性。
总结
通过修改邮件类的构造函数,并在 build 方法中传递数据,可以方便地将数据从控制器传递到邮件视图。这种方法使得邮件内容可以根据不同的用户或场景动态生成,从而提高用户体验。记住在 Blade 模板中使用 $data[‘key’] 的方式访问数据,并注意数据的封装性,就可以轻松地实现动态邮件内容生成。
以上就是Laravel 8:在邮件视图中传递控制器参数的详细内容,更多请关注php中文网其它相关文章!