Неопределенная переменная: $message для уведомления

#php #laravel

#php #laravel

Вопрос:

Я пытаюсь создать уведомление для пользователя, когда в разговоре появляется новое сообщение.

По какой-то причине он говорит, что это неопределенная переменная в уведомлении.

Вот код:

MessageController.php

 $message = $conversation->messages()->create([
    'user_id' => auth()->id(),
    'body' => request('body'),
    'conversation_id' => request('conversation_id')
]);


// when a message is created, notify all users of the conversation

foreach ($message->conversation->users as $messageConversationUser) {
    //if (auth()->user()->id !== $message->user->id) {
        //dd($message);
        $messageConversationUser->notify(new YouHaveNewMessage($message));
    //} 
}
 

YouHaveNewMessage.php

 class YouHaveNewMessage extends Notification
{
    use Queueable;

    protected $message; 

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($message)
    {
        $this->message = $message;
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['database'];
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return IlluminateNotificationsMessagesMailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->line('The introduction to the notification.')
                    ->action('Notification Action', url('/'))
                    ->line('Thank you for using our application!');
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            'message' => $message->user->name . ' left a new message in ' . $message->conversation->title,
            'link' => $this->message->path()
        ];
    }
}
 

Я на самом деле не использую то, что происходит — он возвращает сообщение dd() , но выдает ошибку неопределенной переменной. Кто-нибудь может помочь?

Комментарии:

1. Я думаю, вам нужно изменить $message переменную на другие, потому что laravel автоматически делает $message переменную доступной для всех ваших шаблонов электронной почты

2. Я пробовал $NewMessage и $conversation, но это не сработало, и я все еще получаю ошибку

3. вы уверены, что $message->user-> name не является $this->message-> user-> name в вашей функции toArray?

4. Спасибо, Усама, я не ссылался на переданный объект — он должен был быть $this->message-> user-> name

Ответ №1:

В YouHaveNewMessage классе, методе toArray() есть переменная $message . Похоже, вы используете локальную область видимости, но в $message этом методе не объявлена переменная.

Вам нужно использовать его как $this->message

 public function toArray($notifiable)
    {
        return [
            'message' => $this->message->user->name . ' left a new message in ' . $this->message->conversation->title,
            'link' => $this->message->path()
        ];
    }