php - 如何从 Controller 调用 Mailable 函数?
问题描述
我是 laravel 的新手,并且完成了laravel 可邮寄的文档,该文档以如下所示结束了我mailable
:
ContactMail.php
:
<?php
namespace App\Mail;
use http\Env\Request;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class ContactMail extends Mailable implements ShouldQueue
{
use Queueable, SerializesModels;
public function __construct()
{
//
}
public function build()
{
return $this->markdown('emails.contact');
}
public function store(Request $request)
{
$contactVar = 'hello world!';
Mail::to($request->user())->send(new contact($contactVar));
}
}
我希望从我的调用store
这个函数:mailable
ContactController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
class ContactController extends Controller
{
public function submit(Request $request) {
$this->validate($request, [
'name' => 'required',
'email' => 'required | email',
'message' => 'required'
]);
// store(...)
return response()->json(null, 200);
}
}
我将如何调用该函数,这是一种好习惯吗?抱歉,如果很明显,我正在尝试掌握Laravel/PHP
.
这是对应的email template file
( contact.blade.php
):
@component('mail::message')
# Introduction
The body of your message.
@component('mail::button', ['url' => ''])
Button Text
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent
解决方案
如果你想使用视图,你的邮件应该在store
方法中返回视图。你可以在这里阅读。
所以你的邮件应该看起来更像这样:
class ContactMail extends Mailable implements ShouldQueue
{
// the rest of the code
public function store(Request $request)
{
return $this->view('contact');
}
}
然后您可以Controller
像这样向用户发送邮件:
Mail::to($request->user())->send(new ContactMail());
你可以在这里读到什么。
此外,如果您想在视图中使用变量,可以使用with
方法,并且可以在其中传递带有命名变量的关联数组:
public function store(Request $request)
{
return $this->view('contact')
->with(['contactVariable' => 'hello world!']);
}
要使用此变量,您只需输入$contactVariable
视图模板。