O sistema de Notifications (Notificações) do Laravel fornece uma maneira poderosa e flexível de enviar mensagens a seus usuários através de diversos canais, como e-mail, banco de dados, SMS e Slack. Diferente do sistema de Mail (que é focado apenas em e-mails), as notificações são centradas no evento e no usuário notificável, permitindo que a mesma mensagem seja adaptada para a forma de entrega ideal.
1. 🏗️ Estrutura e Criação de Notificações
Uma Notificação é uma classe que herda de Illuminate\Notifications\Notification e define como a mensagem deve ser formatada para cada canal.
A. Gerando a Notificação
Bash
php artisan make:notification NewCommentNotification
# Cria App/Notifications/NewCommentNotification.php
B. Definição da Notificação
A classe armazena os dados relevantes e usa o método via() para especificar os canais ativos.
PHP
<?php
namespace App\Notifications;
// ... imports
class NewCommentNotification extends Notification
{
use Queueable; // Para enviar o processamento para a fila
public $comment;
public function __construct(Comment $comment) // Injeta o objeto Comment
{
$this->comment = $comment;
}
/**
* Define os canais pelos quais a notificação deve ser enviada.
*/
public function via($notifiable)
{
// Esta notificação será enviada por e-mail e salva no banco de dados
return ['mail', 'database'];
}
// ... métodos toMail, toDatabase, etc.
}
2. 📧 Canais Essenciais de Notificação
Para cada canal especificado em via(), deve haver um método correspondente na classe de notificação (ex: toMail, toDatabase).
A. Canal de E-mail (toMail)
Usa a classe MailMessage para criar e-mails transacionais rapidamente, utilizando um template Blade responsivo padrão do Laravel.
PHP
use Illuminate\Notifications\Messages\MailMessage;
public function toMail($notifiable)
{
// O $notifiable é o usuário ($user)
return (new MailMessage)
->subject('Novo Comentário em sua Publicação')
->greeting('Olá, ' . $notifiable->name . '!')
->line('Você recebeu um novo comentário em sua publicação: "' . $this->comment->post->title . '".')
->action('Ver Comentário', url('/posts/' . $this->comment->post_id . '#comment-' . $this->comment->id))
->line('Obrigado por usar nossa aplicação!');
}
B. Canal de Banco de Dados (toDatabase)
Salva a notificação em uma tabela notifications no banco de dados, permitindo que o usuário visualize notificações in-app (como o sino de notificações do Facebook).
PHP
public function toDatabase($notifiable)
{
return [
'post_id' => $this->comment->post_id,
'comment_id' => $this->comment->id,
'comment_author' => $this->comment->user->name,
];
}
C. Canais de SMS (toNexmo ou toVonage)
Requer a configuração de um provedor de SMS (como Vonage ou Twilio).
PHP
use Illuminate\Notifications\Messages\VonageMessage;
public function toVonage($notifiable)
{
return (new VonageMessage)
->content('Seu post tem um novo comentário! Acesse o app para ver.');
}
3. 📤 Enviando a Notificação
O Laravel adiciona o trait Notifiable por padrão ao seu modelo User (e deve ser adicionado a qualquer modelo que possa receber notificações).
A. Usando o Método notify()
Para enviar a notificação, chame o método notify() no modelo notificável:
PHP
// No seu Controller ou Service
$postAuthor = $comment->post->author;
$newCommentNotification = new NewCommentNotification($comment);
// O Laravel verifica o método via() e envia para Mail e Database.
$postAuthor->notify($newCommentNotification);
B. Enviando para Coleções
Você pode notificar múltiplos usuários de uma vez usando a Facade Notification:
PHP
use Illuminate\Support\Facades\Notification;
$users = User::where('wants_updates', true)->get();
Notification::send($users, new GlobalUpdateNotification());
4. 🗃️ Manipulando Notificações de Banco de Dados
As notificações salvas no banco de dados têm métodos convenientes para serem gerenciadas:
| Método | Função | Exemplo |
unreadNotifications | Obtém todas as notificações não lidas. | $user->unreadNotifications |
markAsRead() | Marca uma notificação ou todas as não lidas como lidas. | $notification->markAsRead(); |
readNotifications | Obtém todas as notificações lidas. | $user->readNotifications |
markAsUnread() | Marca a notificação como não lida. | $notification->markAsUnread(); |
PHP
// Obtendo o número de notificações não lidas
$unreadCount = $user->unreadNotifications->count();
// Marcando todas as notificações como lidas
$user->unreadNotifications->markAsRead();
5. 🧑💻 Canais Personalizados
Se você precisa enviar notificações para canais não suportados nativamente (como Discord, WhatsApp, Telegram, etc.), você pode criar um Canal Personalizado. Basta definir uma classe que implemente o método send($notifiable, Notification $notification) e adicione um método to[NomeDoSeuCanal] na sua notificação.
✅ Conclusão Laravel Notifications
Laravel Notifications: O sistema de notificações é uma ferramenta fundamental para o engajamento do usuário, oferecendo flexibilidade para a entrega multi-canal (e-mail, in-app, SMS). Ao utilizar as classes de notificação, você mantém a lógica de comunicação desacoplada do código de negócio e aproveita a estrutura de filas do Laravel para garantir que o envio seja assíncrono e rápido.
Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:
E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:















