#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()
];
}