#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. Этот «ответ» является избыточным, поскольку он дублирует мой собственный ответ, принятый в апреле…