Spanish (Español) translation by Rene Soto (you can also view the original English article)
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 te permite enviar notificaciones a los usuarios a través de diferentes canales. Hoy, discutiremos cómo puedes enviar notificaciones por el canal de correo.
Conceptos Básicos de las Notificaciones
Durante el desarrollo de la aplicación, a menudo necesita notificar a los usuarios sobre los diferentes cambios de estado. Podría ser enviar notificaciones por correo electrónico cuando se cambia el estado de la orden o enviar un SMS sobre tu actividad de inicio de sesión por razones de seguridad. En particular, estamos hablando de mensajes que son cortos y solo proporcionan información sobre los cambios de estado.
Laravel ya proporciona una función integrada que nos ayuda a lograr algo similar: notificaciones. De hecho, hace que enviar mensajes de notificación a los usuarios sea una experiencia sencilla y divertida.
La belleza de este enfoque es que ye permite elegir entre diferentes canales en los que se enviarán las notificaciones. Repasemos rápidamente los diferentes canales de notificación compatibles con 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 sus teléfonos.
- Slack: en este caso, las notificaciones se enviarán en los canales de Slack.
- Base de datos: esta opción le permite almacenar notificaciones en una base de datos en caso de que desee construir una interfaz de usuario personalizada para mostrarla.
Entre los diferentes canales de notificación, utilizaremos el canal de correo en nuestro caso de uso de ejemplo que vamos a desarrollar a lo largo 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 reciben 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 mencionamos anteriormente, vamos a configurar una aplicación que permita a los usuarios de nuestra aplicación enviarse mensajes entre ellos. Por otro lado, notificaremos a los usuarios cuando reciban un mensaje nuevo 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, creemos el modelo Message
que contiene los
mensajes enviados por los usuarios entre sí.
$php artisan make:model Message --migration
También necesitamos agregar algunos campos to
, from
, y message
a la tabla de messages
. Cambiemos el archivo de migración antes de ejecutar el
comando migrate
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateMessagesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('messages', function (Blueprint $table) { $table->increments('id'); $table->integer('from', FALSE, TRUE); $table->integer('to', FALSE, TRUE); $table->text('message'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('messages'); } }
Ahora, ejecutemos el comando migrate que crea la tabla de mensajes en la base de datos.
$php artisan migrate
Eso debería crear la tabla de messages
en la base de datos.
Además, asegúrate 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 la caja. Si no estás 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, necesitamos crear una clase de notificación personalizada que se utilizará para notificar a los usuarios. Usemos el siguiente comando artesanal para crear una clase de notificación personalizada: NewMessage.
$php artisan make:notification NewMessage
Eso debería crear la clase app / Notifications / NewMessage.php
, así que reemplacemos el contenido de ese archivo con los siguientes contenidos.
<?php // app/Notifications/NewMessage.php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use App\User; class NewMessage extends Notification { use Queueable; public $fromUser; /** * Create a new notification instance. * * @return void */ public function __construct(User $user) { $this->fromUser = $user; } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['mail']; } /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable) { $subject = sprintf('%s: You\'ve got a new message from %s!', config('app.name'), $this->fromUser->name); $greeting = sprintf('Hello %s!', $notifiable->name); return (new MailMessage) ->subject($subject) ->greeting($greeting) ->salutation('Yours Faithfully') ->line('The introduction to the notification.') ->action('Notification Action', url('/')) ->line('Thank you for using our application!'); } /** * Get the array representation of the notification. * * @param mixed $notifiable * @return array */ public function toArray($notifiable) { return [ // ]; } }
Como vamos a usar el canal de correo para enviar
notificaciones a los usuarios, el método via
se configurará en
consecuencia. Este es el método que le permite configurar el tipo de canal de
una notificación.
Luego, está el método toMail
que le permite
configurar varios parámetros de correo electrónico. De hecho, el método toMail
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 varios métodos, el método line
le permite agregar una
sola línea en un mensaje. Por otro lado, está el método action
que le
permite agregar un botón de llamado a la acción en un mensaje.
De esta forma, 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 estás usando el canal de correo para enviar notificaciones.
Al final, debes asegurarte de implementar los
métodos necesarios de acuerdo con el tipo de canal configurado en el método
via
. Por ejemplo, si está utilizando el canal de base de datos que almacena
notificaciones en una base de datos, no necesitas configurar el método toMail
;
en su lugar, debe implementar el método toArray
, 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 la clase de notificación NewMessage.
Vamos a crear un archivo de controlador en la app/Http/ Controllers/NotificationController.php
con los siguientes contenidos.
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use App\Message; use App\User; use App\Notifications\NewMessage; use Illuminate\Support\Facades\Notification; class NotificationController extends Controller { public function __construct() { $this->middleware('auth'); } public function index() { // user 2 sends a message to user 1 $message = new Message; $message->setAttribute('from', 2); $message->setAttribute('to', 1); $message->setAttribute('message', 'Demo message from user 2 to user 1.'); $message->save(); $fromUser = User::find(2); $toUser = User::find(1); // send notification using the "user" model, when the user receives new message $toUser->notify(new NewMessage($fromUser)); // send notification using the "Notification" facade Notification::send($toUser, new NewMessage($fromUser)); } }
Por supuesto, debe agregar una ruta asociada en
el archivo routes/web.php
.
Route::get('notify/index', 'NotificationController@index');
Hay dos formas en que Laravel te permite enviar notificaciones: mediante el uso de la entidad notificable o la fachada Notification.
Si la clase de modelo de entidad utiliza el
atributo Illuminate\Notifications\Notifiable
, puedes llamar al método notify
en ese modelo. The App\User
class implements the Notifiable
trait and thus it becomes the notifiable entity. On the other hand, you could also use the Illuminate\Support\Facades\Notification
Facade to send notifications to users.
Repasemos el método index
del controlador.
En nuestro caso, notificaremos a los usuarios cuando reciban un mensaje nuevo. Así que hemos intentado imitar ese comportamiento en el método index
en primer lugar.
A continuación, notificamos al usuario
destinatario sobre un nuevo mensaje utilizando el método notify
en el objeto $toUser
, ya que es la entidad de notificable obligatoria.
$toUser->notify(new NewMessage($fromUser));
Puedes haber notado que también pasamos el objeto $ fromUser
en el primer argumento del método __construct
, ya que queremos incluir el nombre de usuario from en un mensaje.
Por otro lado, si deseas imitarlo utilizando la fachada Notification
, es bastante fácil hacerlo con el siguiente fragmento.
Notification::send($toUser, new NewMessage($fromUser));
Como puedes ver, hemos utilizado el método send
de la fachada Notificacion para enviar una notificación a un usuario.
Continúe y abre la URL http: //
su-laravel-site-domain / notify / index en su navegador. Si aún no has iniciado
sesión, se te redirigirá a la pantalla de inicio de sesión. Una vez que hayas iniciado sesión, debes recibir un correo electrónico de notificación en la dirección de correo electrónico que se adjunta con el usuario 1
.
Es posible que te preguntes cómo el sistema de
notificación detecta la dirección to
cuando aún no la hemos configurado en
ninguna parte. En ese caso, el sistema de notificación intenta encontrar la propiedad email
en el objeto de declaración obligatoria. Y la clase de objeto App\User
ya tiene esa propiedad ya que estamos usando el sistema de autenticación Laravel predeterminado.
Sin embargo, si deseas anular este comportamiento y deseas usar una propiedad diferente a la del correo electrónico, solo necesitas definir el siguiente método en tu clase de notificación.
public function routeNotificationForMail() { return $this->email_address; }
Ahora, el sistema de notificación debe buscar la propiedad email_address
en lugar de la propiedad email
para buscar la dirección to.
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 discutidas, en las notificaciones de Laravel. Te permite enviar notificaciones a 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 por el 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 recién están empezando con Laravel o buscando ampliar su conocimiento, sitio o aplicación con extensiones, tenemos una variedad de cosas que pueden estudiar en Envato Market.
Si tienes alguna consulta o sugerencia, no dudes en publicarla utilizando los comentarios de abajo.