我有以下錯誤:Laravel通知事件監聽器未定義的屬性
Undefined property: Illuminate\Notifications\Events\NotificationSent::$user in /var/www/app/app/Listeners/NoticationListener.php:31
這裏出現的錯誤:
<?php
namespace App\Listeners;
use Illuminate\Notifications\Events\NotificationSent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class NoticationListener implements ShouldQueue
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param NotificationSent $event
* @return void
*/
public function handle(NotificationSent $event)
{
$notification = $event->notifiable;
$addressee = $notification; //error here
$address = $notification;
$type = "Notification";
dispatch(new SendEmail($type,$addressee,$address));
}
}
我不明白這個未定義的屬性,特別是在這條線。我如何從這裏dd()
?我試圖登錄$event
,但我無法得到它的日誌,只有這個錯誤。
我的通知在應用程序中工作得很好,我只想給他們一個電子郵件,這就是爲什麼我有這個事件監聽器/工作。
謝謝。
EDIT
被分派到該通知的庫代碼是下面:
public function notify($asset)
{
$users = User::where("id","!=",Auth::user()->id)->get();
Notification::send($users, new NewAsset($asset));
}
的Notification
類的該擴展低於:
class NewAsset extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
protected $asset;
public function __construct($asset)
{
$this->asset = $asset;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database'];
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
'asset_id' => $this->asset->id
];
}
}
編輯2
如果有人可以建議在這個時候如何做一些錯誤檢查,那可能會有所幫助。由於代碼在服務器上是異步的,因此它不會將數據返回給客戶端,並且當我嘗試將其獲取到Log
時,似乎並未在陷入錯誤之前這樣做。
如何在這種情況下進行調試?
我看過框架的source code,並不知道$ user屬性來自哪裏。我認爲它與$event->notifiable
綁定到User
模型有關,但如果它從應用程序內的所有受影響用戶正確觸發,爲什麼它的屬性在此上下文中爲undefined
?
請協助,謝謝。
你能告訴我們你的NotificationSent事件嗎? –
@EduardoPacios它是框架代碼 - 見這裏(https://github.com/laravel/framework/blob/bd352a0d2ca93775fce8ef02365b03fc4fb8cbb0/src/Illuminate/Notifications/Events/NotificationSent.php) –
我運行這個通知類和工作以及,如果你沒有在用戶拋出異常時使用Notifiable trait,像這樣:BadMethodCallException:調用未定義的方法Illuminate \ Database \ Query \ Builder :: routeNotificationFor(),但是你的錯誤是必須的,請設置隊列同步和測試值$ event – honarkhah