[英]How to send Email using Laravel Event?
我已经创建了一个事件。当一个项目被创建时,一封电子邮件将发送给该项目所有者。 我已经创建了一个事件和一个监听器。但是我可以将数据存储在数据库中。但是我没有收到邮件。 我收到以下错误:
FatalThrowableError in SendMailFired.php line 31: Call to a member function toArray() on null
这是我的事件 SendMail.php
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class SendMail
{
use InteractsWithSockets, SerializesModels;
public $id;
public function __construct($id)
{
$this->id = $id;
}
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}
这是侦听器 (SendMailFired.php) 部分:
<?php
namespace App\Listeners;
use App\Events\SendMail;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Item;
use Mail;
class SendMailFired
{
public function __construct()
{
}
public function handle(SendMail $event)
{
$item = Item::find($event->id)->toArray();
Mail::send('send', $item, function($message) use ($item) {
$message->to($item['email']);
$message->subject('Event Testing');
});
}
}
这是控制器部分:
public function store(Request $request)
{
$item= new Item();
$item->title = $request->input(['title']);
$item->description=$request->input(['description']);
$item->email = $request->input(['email']);
$item->status = '0';
$item->save();
Event::fire(new SendMail('id'));
return Response::json($item);
}
这可能是一个错字,但我认为
Event::fire(new SendMail('id'));
必须改成
Event::fire(new SendMail($item->id));
您还可以将整个项目传递给事件构造函数,以避免额外的数据库调用。
Event::fire(new SendMail($item->toArray()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.