Как получить доступ к текущему пользователю в уведомлении?

#php #laravel #laravel-5

#php #laravel #laravel-5

Вопрос:

В документах Laravel говорится:

Использование фасада уведомления

В качестве альтернативы вы можете отправлять уведомления через фасад уведомлений. Это полезно в первую очередь, когда вам нужно отправить уведомление нескольким уведомляемым объектам, таким как коллекция пользователей. Чтобы отправлять уведомления с использованием фасада, передайте все уведомляемые объекты и экземпляр уведомления в метод отправки:

 Notification::send($users, new InvoicePaid($invoice));
  

Итак, я делаю это в своем контроллере:

 public function index()
{
  $subscribers = Subscribers::all();
  
  Notification::send($subscribers, new NewVacancy($subscribers));
}
  

И вот мой класс уведомлений

 class NewVacancy extends Notification implements ShouldQueue
{
use Queueable;

public $subscriber; 

public function __construct( $subscribers)
{
    $this->subscriber = $subscribers;
}

public function toMail($notifiable)
{
 
  return (new MailMessage)->view(
    'mail.new-vacancy', 
    ['uuid' => $this->subscriber->uuid]// This fails as $subscriber is a collection
  );
}

....
  

Проблема в том, что внутри NewVacancy класса $subscriber передается полная коллекция всех подписчиков, а не отправляемое отдельное уведомление.

Теперь я знаю, что мог бы повторять цикл $subscribers и запускать Notification::send() каждый раз, но это сводит на нет смысл использования facade с самого начала.

Общая цель — отправить электронные письма всем $subscribers с возможностью передачи уникальных данных подписчика с использованием шаблона блейда.

Ответ №1:

Я узнал, что вы можете получить доступ к текущему пользователю через $notifiable объект, который передается в toMail() метод.

 public function toMail($notifiable)
{

  return (new MailMessage)->view(
    'mail.new-vacancy', 
    ['uuid' => $notifiable->uuid]
  );

}
  

Ответ №2:

Пожалуйста, обратите внимание, что $notifiable представляет пользовательский объект, который получает уведомление.

 $user_id = $notifiable->id;
  

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

1. Этот «ответ» является избыточным, поскольку он дублирует мой собственный ответ, принятый в апреле…