2017-01-13 2 views
1

Учитывая, что 100 подписчиков, как только я заканчиваю todo, выдается уведомление. Проблема заключается в том, что 80 из них хотят получать уведомление только по электронной почте, а другое 20 хотят получить уведомление только с смс. Означает ли это, что мне нужно использовать 2 различных уведомлений называет так:Laravel 5.3 - Отдельный файл уведомлений для разных пользовательских коллекций?

Notification::send($emailOnlyUsers, new TodoCompletedEmail($todo)); 

, который имеет только почтовый канал, а затем:

Notification::send($smsOnlyUsers, new TodoCompletedSms($todo)); 

, который имеет только канал смс? Или возможно иметь логику $emailOnlyUsers и $smsOnlyUsers в файле TodoCompleted Notification, где оба канала перечислены вместе для обработки разных каналов для разных пользователей в одном файле? Что-то вроде этого:

$user->notify(new TodoCompletedEmail($todo)); 

Я спрашиваю, потому что я предпочел бы сделать это в одном файле с различными каналами, но я не думаю, что я могу, так как уведомление Laravel ожидает переданную коллекцию пользователей (в этой ситуации есть на самом деле 2 коллекций пользователей), но возможно больше каналов/разных коллекций, и было бы необходимо создать новый файл уведомлений для каждого канала/коллекции пользователей для того же уведомления TodoCompleted. Может кто-то пролил некоторый свет на то, возможно ли иметь его в одном файле, и если да, то как?

ответ

1

Как насчет этого?

foreach($users as $user) 
    $user->notify(new TodoCompleted($todo)); 

Тогда в вашем TodoCompleted Класс

private $todo; 

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

/** 
* Get the notification's delivery channels. 
* 
* @param mixed $notifiable 
* @return array 
*/ 
public function via($notifiable) 
{ 
    // Change "prefer_sms" to whatever logic you're using to determine if the user should be sent sms or email. 
    if($notifiable->prefers_sms) 
     return ['sms', 'database']; 

    return ['mail', 'database']; 
} 
+0

отлично работает, спасибо :) – Wonka