Notificaciones en Laravel

En este artículo, vamos a explorar el sistema de notificación en el marco web de Laravel. El sistema de notificación en Laravel le permite enviar notificaciones a los usuarios a través de diferentes canales. Hoy, discutiremos cómo puede enviar notificaciones a través del canal de correo..

Conceptos básicos de las notificaciones

Durante el desarrollo de la aplicación, a menudo es necesario notificar a los usuarios sobre diferentes cambios de estado. Podría ser enviar notificaciones por correo electrónico cuando se cambia el estado del pedido o enviar un SMS sobre su actividad de inicio de sesión por motivos de seguridad. En particular, estamos hablando de mensajes que son breves y simplemente proporcionan información sobre los cambios de estado.

Laravel ya proporciona una función incorporada que nos ayuda a lograr algo similar: notificaciones. De hecho, facilita el envío de mensajes de notificación a los usuarios y una experiencia divertida.!

La belleza de este enfoque es que le permite elegir entre diferentes canales a los que se enviarán notificaciones. Vayamos rápidamente a través de los diferentes canales de notificación soportados por Laravel..

  • Correo: Las notificaciones se enviarán en forma de correo electrónico a los usuarios..
  • SMS: Como su nombre indica, los usuarios recibirán notificaciones por SMS en su teléfono..
  • Flojo: En este caso, las notificaciones se enviarán en canales Slack..
  • Base de datos: Esta opción le permite almacenar notificaciones en una base de datos si desea crear una IU personalizada para mostrarla.

Entre los diferentes canales de notificación, usaremos el canal de correo en nuestro caso de uso de ejemplo que vamos a desarrollar en el transcurso de este tutorial..

De hecho, será un caso de uso bastante simple que permite a los usuarios de nuestra aplicación enviar mensajes a cada usuario. Cuando los usuarios reciban un nuevo mensaje en su bandeja de entrada, les notificaremos sobre este evento enviándoles un correo electrónico. Por supuesto, lo haremos usando la función de notificación de Laravel!

Crear una clase de notificación personalizada

Como comentamos anteriormente, vamos a configurar una aplicación que permita a los usuarios de nuestra aplicación enviar mensajes entre sí. Por otro lado, notificaremos a los usuarios cuando reciban un nuevo mensaje de otros usuarios por correo electrónico..

En esta sección, crearemos los archivos necesarios que se requieren para implementar el caso de uso que estamos buscando..

Para empezar, vamos a crear el Mensaje Modelo que contiene los mensajes enviados por los usuarios entre sí..

$ php artesanal hace: modelo de mensaje --migración

También necesitamos agregar algunos campos como a, desde y mensaje al mensajes mesa. Así que vamos a cambiar el archivo de migración antes de ejecutar el emigrar mando.

incrementos ('id'); $ table-> integer ('from', FALSE, TRUE); $ table-> integer ('to', FALSE, TRUE); $ tabla-> texto ('mensaje'); $ table-> timestamps (); );  / ** * Revertir las migraciones. * * @return void * / public function down () Schema :: dropIfExists ('messages'); 

Ahora, ejecutemos el comando migrar que crea la tabla de mensajes en la base de datos.

$ php artesano migra

Eso debería crear el mensajes tabla en la base de datos.

Además, asegúrese de haber habilitado el sistema de autenticación Laravel predeterminado en primer lugar para que funciones como el registro y el inicio de sesión funcionen de forma inmediata. Si no está seguro de cómo hacerlo, la documentación de Laravel proporciona una visión rápida de eso..

Dado que cada notificación en Laravel está representada por una clase separada, debemos crear una clase de notificación personalizada que se usará para notificar a los usuarios. Usemos el siguiente comando de Artisan para crear una clase de notificación personalizada: NewMessage.

$ php artisan make: notificación NewMessage

Eso debería crear el aplicación / Notificaciones / NewMessage.php clase, así que vamos a reemplazar el contenido de ese archivo con el siguiente contenido.

fromUser = $ usuario;  / ** * Obtener los canales de entrega de la notificación. * * @param mixed $ notifiable * @return array * / public function via ($ notifiable) return ['mail'];  / ** * Obtener la representación de correo de la notificación. * * @param mixed $ notifiable * @return \ Illuminate \ Notifications \ Messages \ MailMessage * / public function toMail ($ notifiable) $ subject = sprintf ('% s: ¡Ha recibido un nuevo mensaje de% s!' , config ('app.name'), $ this-> fromUser-> name); $ greeting = sprintf ('Hello% s!', $ notifiable-> name); return (nuevo MailMessage) -> asunto ($ asunto) -> saludo ($ saludo) -> saludo ('Atentamente') -> línea ('La introducción a la notificación.') -> acción ('Acción de notificación', url ('/')) -> línea ('¡Gracias por usar nuestra aplicación!');  / ** * Obtener la representación de matriz de la notificación. * * @param mixed $ notifiable * @return array * / public function toArray ($ notifiable) return [//]; 

Como vamos a utilizar el canal de correo para enviar notificaciones a los usuarios, el vía El método se configura en consecuencia. Este es el método que le permite configurar el tipo de canal de una notificación..

A continuación, está la enviar por correo Método que le permite configurar varios parámetros de correo electrónico. De hecho, la enviar por correo método debe devolver la instancia de \ Illuminate \ Notifications \ Messages \ MailMessage, y esa clase proporciona métodos útiles que le permiten configurar parámetros de correo electrónico.

Entre los diversos métodos, el línea método le permite agregar una sola línea en un mensaje. Por otro lado, está la acción Método que le permite agregar un botón de llamada a la acción en un mensaje.

De esta manera, podría formatear un mensaje que se enviará a los usuarios. Así es como se supone que debes configurar la clase de notificación mientras usas el canal de correo para enviar notificaciones.

Al final, debe asegurarse de implementar los métodos necesarios de acuerdo con el tipo de canal configurado en el vía método. Por ejemplo, si está utilizando el canal de base de datos que almacena las notificaciones en una base de datos, no necesita configurar el enviar por correo método; en su lugar, debe implementar el toArray Método, que formatea los datos que deben almacenarse en una base de datos..

Cómo enviar notificaciones

En la sección anterior, creamos una clase de notificación que está lista para enviar notificaciones. En esta sección, crearemos archivos que demuestren cómo podría enviar notificaciones utilizando el Nuevo mensaje clase de notificación.

Vamos a crear un archivo controlador en app / Http / Controllers / NotificationController.php con los siguientes contenidos.

middleware ('auth');  índice de función pública () // el usuario 2 envía un mensaje al usuario 1 $ mensaje = nuevo Mensaje; $ mensaje-> setAttribute ('desde', 2); $ mensaje-> setAttribute ('a', 1); $ mensaje-> setAttribute ('mensaje', 'Mensaje de demostración del usuario 2 al usuario 1.'); $ mensaje-> guardar (); $ fromUser = User :: find (2); $ toUser = User :: find (1); // enviar notificación usando el modelo de "usuario", cuando el usuario recibe el nuevo mensaje $ toUser-> notificar (nuevo NewMessage ($ fromUser)); // enviar notificación usando la fachada de "Notificación" Notification :: send ($ toUser, new NewMessage ($ fromUser)); 

Por supuesto, necesita agregar una ruta asociada en el rutas / web.php expediente.

Route :: get ('notify / index', 'NotificationController @ index');

Hay dos formas en que Laravel le permite enviar notificaciones: utilizando la entidad notificable o la fachada de Notificación.

Si la clase modelo de entidad utiliza Iluminar \ Notificaciones \ Notificables rasgo, entonces podrias llamar al notificar Método en ese modelo. los Aplicación \ usuario clase implementa el De declaración obligatoria Rasgo y por lo tanto se convierte en la entidad notificable. Por otro lado, también puedes usar el Iluminar \ Soporte \ Fachadas \ Notificación Fachada para enviar notificaciones a los usuarios..

Vayamos a través de la índice método del controlador.

En nuestro caso, notificaremos a los usuarios cuando reciban un nuevo mensaje. Así que hemos tratado de imitar ese comportamiento en el índice método en primer lugar.

A continuación, hemos notificado al usuario destinatario acerca de un nuevo mensaje utilizando el notificar método en el $ toUser objeto, ya que es el de declaración obligatoria entidad.

$ toUser-> notificar (nuevo NewMessage ($ fromUser));

Es posible que hayas notado que también pasamos el $ fromUser objeto en el primer argumento de la __construir Método, ya que queremos incluir el desde nombre de usuario en un mensaje.

Por otro lado, si quieres imitarlo utilizando el Notificación fachada, es bastante fácil hacerlo usando el siguiente fragmento de código.

Notificación :: enviar ($ toUser, nuevo NewMessage ($ fromUser));

Como puedes ver, hemos usado el enviar Método de la fachada de notificación para enviar una notificación a un usuario..

Continúe y abra la URL http: // su-laravel-site-domain / notification / index en su navegador. Si aún no ha iniciado sesión, será redirigido a la pantalla de inicio de sesión. Una vez que haya iniciado sesión, debe recibir un correo electrónico de notificación en la dirección de correo electrónico que se adjunta con el usuario 1.

Quizás se pregunte cómo el sistema de notificación detecta la a Dirección cuando aún no lo hemos configurado en ninguna parte. En ese caso, el sistema de notificación intenta encontrar el correo electrónico Propiedad en el objeto de declaración obligatoria. Y el Aplicación \ usuario La clase de objeto ya tiene esa propiedad, ya que estamos usando el sistema de autenticación Laravel predeterminado..

Sin embargo, si desea anular este comportamiento y desea utilizar una propiedad diferente a la del correo electrónico, solo necesita definir el siguiente método en su clase de notificación.

función pública routeNotificationForMail () return $ this-> email_address; 

Ahora, el sistema de notificación debe buscar el dirección de correo electrónico propiedad en lugar de la correo electrónico propiedad para buscar el a dirección.

Y así es como usar el sistema de notificación en Laravel. Eso nos lleva al final de este artículo también.!

Conclusión

Lo que hemos pasado hoy es una de las funciones útiles, aunque menos comentadas, en las notificaciones de Laravel. Te permite enviar notificaciones a los usuarios a través de diferentes canales..

Después de una introducción rápida, implementamos un ejemplo del mundo real que demostró cómo enviar notificaciones a través del canal de correo. De hecho, es realmente útil en el caso de enviar mensajes cortos sobre cambios de estado en su aplicación..

Para aquellos de ustedes que ya están comenzando con Laravel o que desean ampliar sus conocimientos, sitio o aplicación con extensiones, tenemos una variedad de cosas que puede estudiar en Envato Market..

Si tiene alguna consulta o sugerencia, no dude en publicarlas utilizando el siguiente feed!