Him*_*kar 6 php laravel laravel-5.5
嗨,我是 Laravel 事件和侦听器的初学者。所以请解释我如何实现这一目标:
目的 :
向用户发送电子邮件。并知道是否发送了电子邮件。
我的理解 :
Laravel 有内置事件 Illuminate\Mail\Events\MessageSent发送电子邮件后触发,我必须编写一个侦听器来侦听该事件。
我做了什么 :
发送电子邮件:
Mail::to($receiverAddress)->send(new SendNewUserPassword($content));
Run Code Online (Sandbox Code Playgroud)
这工作正常。能够成功向用户发送电子邮件。
为了监听 messageSent 事件,我创建了这个监听器:
<?php
namespace App\Listeners;
use Illuminate\Mail\Events\MessageSent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class LogSentMessage
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param MessageSent $event
* @return void
*/
public function handle(MessageSent $event)
{
return $event->message;
}
}
Run Code Online (Sandbox Code Playgroud)
注册事件:
protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
'Illuminate\Mail\Events\MessageSent' => [
'App\Listeners\LogSentMessage',
],
];
Run Code Online (Sandbox Code Playgroud)
在控制器中:
event(new MessageSent())
Run Code Online (Sandbox Code Playgroud)
请指导我如何从控制器返回在 Listener 中处理的消息。如果我的上述方法是错误的,请解释我如何实现它。这是我用于 api,所以如果发送邮件是成功/失败我想知道。
您可以将数据从控制器传递到可邮寄的数据,然后从可邮寄的数据传递到侦听器
例如,我有一个名为的模型SendOrder,用于跟踪电子邮件的状态,因此我将此模型从控制器传递到侦听器
这是你必须从头开始做的事情
将模型传递给您的 Mailable 构造函数
$send_order = SendOrder::create(['status' => 'received', 'email' => 'foo@example.com']);
Mail::to($receiverAddress)->send(new SendNewMail($send_order));
Run Code Online (Sandbox Code Playgroud)
SendNewMailMailable 类有一个方法withSwiftMessage(),您可以使用它来存储稍后可以从侦听器访问的变量/对象。
我们将创建一个构造函数,将模型传递给build()我们可以执行withSwiftMessage()以供以后存储的方法。
use App\SendOrder;
class SendNewMail extends Mailable
{
protected $send_order;
public function __construct( SendOrder $send_order )
{
$this->send_order = $send_order;
}
public function build()
{
$send_order = $this->send_order;
$this->withSwiftMessage(function ($message) use($send_order) {
$message->send_order = $send_order;
});
// Do more stuffs
}
}
Run Code Online (Sandbox Code Playgroud)
protected $listen =
'Illuminate\Mail\Events\MessageSent' => [
'App\Listeners\LogSentMessage',
],
];
Run Code Online (Sandbox Code Playgroud)
php artisan event:generate
这将自动生成新的侦听器app\Listeners\LogSentMessage,其模板代码连接到内置事件Illuminate\Mail\Events\MessageSent
LogSentMessage您可以通过以下方式访问模型:
public function handle(MessageSent $event)
{
$send_order = $event->message->send_order;
$send_order->update(['status' => 'sent']);
}
Run Code Online (Sandbox Code Playgroud)
小智 2
在您EventServiceProvider添加事件和侦听器
protected $listen = [
'Illuminate\Notifications\Events\NotificationSent' => [
'App\Listeners\YourListenerClass',
],
];
Run Code Online (Sandbox Code Playgroud)
并在 YourListnerClass 中
public function handle(NotificationSent $event)
{
//access your $event data here
//which includes notification details too
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4774 次 |
| 最近记录: |