Laravel Notifications

Laravel
Tempo de leitura: 4 minutos

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étodoFunçãoExemplo
unreadNotificationsObté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();
readNotificationsObté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:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

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:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.