mam następujący błąd:laravel Powiadomienia Event Listener Undefined Property
Undefined property: Illuminate\Notifications\Events\NotificationSent::$user in /var/www/app/app/Listeners/NoticationListener.php:31
Błąd występuje tutaj:
<?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));
}
}
ja tego nie rozumiem niezdefiniowanej właściwości, szczególnie na tej linii. Jak mogę stąd odebrać dd()
? Próbowałem zalogować $event
, ale nie mogłem go zarejestrować, tylko dostałem ten błąd.
Moje powiadomienia działają bardzo dobrze w aplikacji, chcę tylko e-mail, aby im towarzyszyć, dlatego mam tego zdarzenia-słuchacza/pracy.
Dziękuję.
EDIT
repozytorium kodu, który jest dysponowanie zgłoszenie jest poniżej:
public function notify($asset)
{
$users = User::where("id","!=",Auth::user()->id)->get();
Notification::send($users, new NewAsset($asset));
}
To rozszerzenie klasy Notification
jest poniżej:
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
];
}
}
Edytowanie 2
Jeśli ktoś mógłby doradzić, jak wykonać kontrolę błędów w tym momencie, może to być przydatne w przyszłości. Ponieważ kod jest asynchroniczny na serwerze, nie zwraca danych do klienta, a kiedy próbuję go pobrać do Log
, wydaje się, że nie robi tego, zanim zostanie przechwycony przez błąd.
Jak mogę przeprowadzić debugowanie w tym scenariuszu?
Przyjrzałem się architekturze source code i nie mam pojęcia, skąd pochodzi właściwość $ user. Zakładam, że ma to związek z $event->notifiable
związanym z modelem User
, ale jeśli jest on uruchamiany poprawnie dla wszystkich użytkowników, których dotyczy problem, z aplikacji, dlaczego jego własność miałaby być w tym kontekście wartością undefined
?
Proszę o pomoc, dziękuję.
Czy możesz pokazać nam swoje wydarzenie NotificationSent? –
@EduardoPacios to kod framework - patrz tutaj (https://github.com/laravel/framework/blob/bd352a0d2ca93775fce8ef02365b03fc4fb8cbb0/src/Illuminate/Notifications/Events/NotificationSent.php) –
uruchamiam również klasę powiadomień i pracę, jeśli nie korzystasz z funkcji podlegającej notyfikacji przy wyjątku throw użytkownika: BadMethodCallException: wywołanie niezdefiniowanej metody Illuminate \ Database \ Query \ Builder :: routeNotificationFor(), ale Twój błąd jest Must cudowny, ustaw kolejkę na synchronizację i przetestuj wartość $ event – honarkhah