2016-10-09 56 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

它m飛行是一個錯字,但我認爲

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

已變成

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

您還可以通過整個項目的情況下構造,以避免額外的數據庫調用。

Event::fire(new SendMail($item->toArray())); 
相關問題