J'ai un champ booléen receiveEmail dans le modèle utilisateur d'une application Laravel. Comment puis-je m'assurer que les notifications par e-mail respectent ce champ et n'envoie l'e-mail à l'utilisateur que si le champ est vrai?
Ce que je veux, c'est que ce code:
$event = new SomeEvent($somedata); Auth::user()->notify($event);
où SomeEvent est une classe qui étend la notification et implémente 'mail' sur la méthode via () , n'envoie un e-mail que si l'utilisateur a autorisé les e-mails.
3 Réponses :
essayez de créer une nouvelle méthode dans le modèle utilisateur comme celui-ci ..
fichier de modèle utilisateur ..
App\User::where('id',1)->first()->notifyMail();
et appelez maintenant comme ceci dans le contrôleur .. p >
App\User::find(1)->notifyMail();
ou
Auth::user()->notifyMail();
ou
public function scopeNotifyMail() {
if($this->receiveEmail == true) { //if field is enable email other wise not send..
$event = new SomeEvent($somedata);
$this->notify($event);
}
}
J'ai plusieurs événements, pas un seul. Cela ajouterait une tonne de méthodes au modèle utilisateur, et ne gérerait pas les collections d'utilisateurs dans quelque chose comme Notification :: send ($ users, $ event) ;
J'ai fini par créer un nouveau canal qui implémente la vérification. Dans l'application / les chaînes, ajoutez votre chaîne, quelque chose comme ceci:
/**
* Register any application services.
*
* @return void
*/
public function register()
$this->app->bind(
\Illuminate\Notifications\Channels\MailChannel::class,
UserCheckMailChannel::class
);
}
Ensuite, liez votre classe sur Providers / AppServiceProvider.php à l'ancienne classe de messagerie: p >
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);
}
}
Faites vérifier ceci via la méthode (): https://laravel.com/docs/6.x/notifications#specifying -delivery-channels
public function via($notifiable)
{
// $notifiable object is User instance for most cases
$wantsEmail = $notifiable->settings['wants_email']; // your own logic
if(!$wantsEmail){
// no email only database log
return ['database'];
}
return ['database', 'mail'];
}
J'espère que cela fonctionnera lors de l'envoi de notifications à plusieurs utilisateurs. Merci
Dépend de votre logique de messagerie. Envoyez-vous un e-mail directement à un e-mail ou demandez-vous d'abord un utilisateur correspondant à cet e-mail? Vous devez fournir du code ici; nous ne pourrons pas beaucoup vous aider.