Qué son las notificaciones
El sistema de notificaciones de Laravel envía notificaciones a distintos canales (correo, SMS, Slack, base de datos, etc.) mediante una API unificada. Diferencias entre Mail y Notification
Cuando quieres enviar un mismo aviso por varios canales (por ejemplo, el pago de una factura confirmado), las Notifications son la opción idónea.
Crear una clase de notificación
Genera la clase con el comando Artisanmake:notification.
app/Notifications/. Incluye el método via() y métodos para generar el mensaje por cada canal.
Cómo enviar notificaciones
Con el trait Notifiable
App\Models\User incluye por defecto el trait Notifiable. Envía notificaciones con el método notify().
Puedes añadir
Notifiable a cualquier modelo, no solo a User.Con el facade Notification
Para enviar a varios usuarios a la vez, utiliza el facadeNotification.
sendNow().
Indicar los canales
En el métodovia() devuelves un array con los canales que se van a usar.
Notificaciones por correo
EntoMail() devuelve una instancia de MailMessage.
MailMessage:
Para notificar un error, añade
error() y el botón cambia a rojo.
Notificaciones de correo en Markdown
También puedes usar plantillas Markdown enriquecidas. Genera la clase con la opción--markdown.
toMarkdownMail() en lugar de toMail().
Notificaciones en base de datos
El canal de base de datos guarda las notificaciones en la BD para mostrarlas en la interfaz de la aplicación.Preparar la tabla
Crea la tablanotifications.
Definir toArray
Devuelve los datos a guardar como array desdetoArray().
data de la tabla notifications.
Obtener las notificaciones
Con la relaciónnotifications del trait Notifiable puedes obtenerlas.
unreadNotifications.
Marcar como leídas
ConmarkAsRead() marcas la notificación como leída.
Notificaciones encoladas
Si el envío es lento, añade la interfazShouldQueue y el trait Queueable. La clase generada con make:notification ya los importa.
ShouldQueue, al llamar a notify() la notificación se encola automáticamente.
Envío simultáneo a varios canales
Basta con devolver varios canales envia() y definir el método correspondiente a cada uno para enviar la misma notificación a varios canales a la vez.
Notificaciones bajo demanda
Para notificar a usuarios que no tienen cuenta en la aplicación, utilizaNotification::route().