Проверьте настройки пользователя перед отправкой электронного уведомления в Laravel - PullRequest
0 голосов
/ 01 марта 2019

У меня есть логическое поле receiveEmail в пользовательской модели приложения Laravel.Как я могу убедиться, что почтовые уведомления относятся к этому полю, и отправляет электронное письмо пользователю только в том случае, если поле имеет значение true?

Что мне нужно, так это код:

$event = new SomeEvent($somedata);
Auth::user()->notify($event);

где SomeEventявляется классом, который расширяет Уведомление и реализует 'mail' в методе via(), отправляет электронное письмо только в том случае, если пользователь разрешил электронную почту.

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Я закончил тем, что создал новый канал, который реализует проверку.В приложении / каналах добавьте свой канал, примерно так:

namespace App\Channels;

use App\User;
use Illuminate\Notifications\Channels\MailChannel;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Arr;

class UserCheckMailChannel extends MailChannel
{
    /**
     * Send the given notification.
     *
     * @param  mixed  $notifiable
     * @param  \Illuminate\Notifications\Notification  $notification
     * @return void
     */
    public function send($notifiable, Notification $notification)
    {
        // check if user should receive emails. Do whatever check you need here.
        if ($notifiable instanceof User && !$notifiable->receiveEmails) {
            return;
        }
        // yes, convert to mail and send it
        $message = $notification->toMail($notifiable);
        if (!$message) {
            return;
        }

        parent::send($notifiable, $notification);
    }
}

Затем привяжите свой класс на Providers/AppServiceProvider.php к старому классу почты:

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()

        $this->app->bind(
            \Illuminate\Notifications\Channels\MailChannel::class,
            UserCheckMailChannel::class
        );
    }
0 голосов
/ 01 марта 2019

попробуйте создать новый метод в пользовательской модели, как это ..

файл пользовательской модели ..

public function scopeNotifyMail() {
        if($this->receiveEmail == true) { //if field is enable email other wise not send..
            $event = new SomeEvent($somedata);
            $this->notify($event);
        }    
}

и теперь вызывайте как это в контроллере ..

Auth::user()->notifyMail();

или

App\User::find(1)->notifyMail();

или

App\User::where('id',1)->first()->notifyMail();
...