2016-10-09 4 views
1

Я создал событие. Где были созданы Элементы, электронное письмо отправит этому владельцу элемента. Я создал событие и прослушиватель. Но я могу хранить данные в базе данных. Но я не получил почту. Я получил следующую ошибку:Как отправить электронную почту с помощью события Laravel?

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

ответ

2

It m IGHT быть опечатка, но я думаю, что

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

должен быть изменен в

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

Вы можете также передать весь элемент конструктору событий, для того, чтобы избежать дополнительного вызова базы данных.

Event::fire(new SendMail($item->toArray())); 
Смежные вопросы