首页 > 解决方案 > Laravel:将联系表单数据获取到通知门面邮件中

问题描述

刚刚在我的网站上创建了一个联系我的表格,当有人发送消息时,我想向网站的管理员发送一封电子邮件。我正在使用 Laravel 中的通知外观来执行此操作,我设法发送了电子邮件,但我无法在邮件中获取联系表单的数据。我怎样才能做到这一点?

联系人控制器.php

class ContactController extends Controller
{
    public function index() {
        return view('contact.index');
    }
    public function store(Request $request, Contact $contact) {
        $validatedAttributes = request()->validate([
            'email' => ['required', 'email:rfc,dns'],
            'subject' => 'required',
            'content' => 'required'
        ]);

        $contact->create($validatedAttributes);

        $user = User::role('super-admin')->select('email')->first();

        $user->notify(new ContactReceived(), $contact);


        return response()->json('Message sent.');
    }
}

class ContactReceived extends Notification
{
    use Queueable;


    public function __construct()
    {
    }


    public function via($notifiable)
    {
        return ['mail'];
    }


    public function toMail($notifiable)
    {

        return (new MailMessage)
                ->subject('subject')
                ->greeting('Hello,')
                ->line('some line');
    }
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

标签: phplaravellaravel-8

解决方案


只需将您的contact传入构造函数:

public function store(Request $request) {
    $validatedAttributes = request()->validate([
        'email' => ['required', 'email:rfc,dns'],
        'subject' => 'required',
        'content' => 'required'
    ]);

    $contact = Contact::create($validatedAttributes); // create contact

    $user = User::role('super-admin')->select('email')->first();

    $user->notify(new ContactReceived($contact)); // pass contact into notification

    return response()->json('Message sent.');
}

在那里,在通知中,您还必须添加属性并在构造函数中处理它

class ContactReceived extends Notification
{
    private $contact;
    
    public function __construct(Contact $contact)
    {
        $this->contact = $contact;
    }

    public function toMail($notifiable)
    {
        // $this->contact is accessible anywhere in the notification
    }
}

然后你可以$this->contact在通知中使用。

您可以在此处找到更多信息。


推荐阅读