【问题标题】:How to send Email using Laravel Event?如何使用 Laravel 事件发送电子邮件?
【发布时间】:2016-10-09 20:00:53
【问题描述】:

我创建了一个事件。创建项目后,将向该项目所有者发送一封电子邮件。我已经创建了一个事件和一个监听器。但是我可以将数据存储在数据库中。但是我没有收到邮件。我收到以下错误:

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);
            }

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    这可能是一个错字,但我认为

    Event::fire(new SendMail('id'));
    

    必须改成

    Event::fire(new SendMail($item->id));
    

    您还可以将整个项目传递给事件构造函数,以避免额外的数据库调用。

    Event::fire(new SendMail($item->toArray()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2017-10-12
      • 2018-02-01
      • 1970-01-01
      • 2021-01-01
      • 2017-09-22
      相关资源
      最近更新 更多