Duilio Palacios
29/05/2020
Documentación, Laravel
Introducción
Además de soporte para enviar correos electrónicos, Laravel brinda soporte para el envío de notificaciones mediante una variedad de canales de entrega, incluyendo correo, SMS (a través de Nexmo) y Slack. Las notificaciones pueden ser también almacenadas en una base de datos para que puedan ser mostradas en la interfaz de tu página web.
Generalmente, las notificaciones deben ser mensajes cortos e informativos que notifiquen a los usuarios que algo ocurrió en tu aplicación. Por ejemplo, si estás escribiendo una aplicación de facturación, podrías enviar una notificación de «Recibo de Pago» a tus usuarios mediante correo electrónico y por SMS.
Crear notificaciones
En Laravel, cada notificación está representada por una sola clase (generalmente almacenada en el directorio app/Notifications
). No te preocupes si no ves este directorio en tu aplicación, será creado por ti cuando ejecutes el comando Artisan make:notification
:
php artisan make:notification InvoicePaid
Este comando colocará una clase de notificación nueva en tu directorio app/Notifications
. Cada clase de notificación contiene un método via
y un número variable de métodos de construcción de mensaje (tales como toMail
o toDatabase
) que convierten la notificación en un mensaje optimizado para ese canal en particular.
Enviar notificaciones
Ver post
Duilio Palacios
29/05/2020
Documentación, Laravel
Introducción
Laravel proporciona una poderosa abstracción del sistema de archivos gracias al genial paquete de PHP Flysystem de Frank de Jonge. La integración de Flysystem de Laravel proporciona drivers simples de usar para trabajar con sistemas de archivos locales y Amazon S3. Aún mejor, es maravillosamente simple cambiar entre estas opciones de almacenamiento de modo que la API permanezca sin cambios para cada sistema.
Configuración
La configuración del sistema de archivos está ubicada en config/filesystems.php
. Dentro de este archivo puedes configurar todos tus «discos». Cada disco representa un driver de almacenamiento y una ubicación de almacenamiento en particular. Configuraciones de ejemplo para cada driver soportado están incluidas en el archivo de configuración. Así que, modifica la configuración para reflejar tus preferencias de almacenamiento y credenciales.
Puedes configurar tantos discos como quieras e incluso tener múltiples discos que usen el mismo driver.
Ver post
Duilio Palacios
29/05/2020
Documentación, Laravel
Introducción
Los eventos de Laravel proporcionan una implementación de observador simple, lo que permite suscribirse y escuchar diversos eventos que ocurren en tu aplicación. Las clases de eventos normalmente se almacenan en el directorio app/Events
, mientras que tus oyentes se almacenan en app/Listeners
. No te preocupes si no ves estos directorios en tu aplicación, ya que se crearán para ti cuando generes eventos y oyentes utilizando los comandos de consola Artisan.
Los eventos sirven como una excelente manera de desacoplar varios aspectos de tu aplicación, ya que un solo evento puede tener múltiples oyentes que no dependen entre sí. Por ejemplo, es posible que desees enviar una notificación de Slack a tu usuario cada vez que se envíe un pedido. En lugar de acoplar tu código de procesamiento de pedidos a tu código de notificación Slack, puedes generar un evento OrderShipped
, que un oyente puede recibir y transformar en una notificación Slack.
Registro de eventos y oyentes
El EventServiceProvider
incluido en tu aplicación Laravel proporciona un lugar conveniente para registrar todos los oyentes de eventos de tu aplicación. La propiedad listen
contiene un arreglo de todos los eventos (claves) y sus oyentes (valores). Puedes agregar tantos eventos a este arreglo como lo requiera tu aplicación. Por ejemplo, agreguemos un evento OrderShipped
:
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\OrderShipped' => [
'App\Listeners\SendShipmentNotification',
],
];
Ver post
Duilio Palacios
29/05/2020
Documentación, Laravel
Introducción
La clase Illuminate\Support\Collection
provee una interfaz fluida y conveniente para trabajar con arreglos de datos. Por ejemplo, mira el siguiente código. Usaremos la función helper collect
para crear una nueva instancia de Collection
pasando un arreglo como parámetro, se ejecuta la función strtoupper
en cada elemento y luego elimina todos los elementos vacíos:
$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
return strtoupper($name);
})
->reject(function ($name) {
return empty($name);
});
Como puedes ver, la clase Collection
te permite encadenar sus métodos para realizar un mapeo fluido y reducir el arreglo subyacente. En general, las colecciones son inmutables, es decir, cada método de Collection
retorna una nueva instancia de Collection
.
Ver post
Duilio Palacios
29/05/2020
Documentación, Laravel
Configuración
Laravel proporciona una API expresiva y unificada para varios backends de almacenamiento de caché. La configuración de caché está ubicada en config/cache.php
. En este archivo puedes indicar el controlador de caché que desees utilizar por defecto en toda tu aplicación. Laravel es compatible con los almacenamientos en caché más populares, tales como Memcached y Redis.
El archivo de configuración de caché contiene otras opciones adicionales, las cuales están documentadas dentro del mismo archivo, por lo que deberás asegurarte de revisar estas opciones. Por defecto, Laravel está configurado para utilizar el controlador de caché file
, que almacena los objetos serializados y almacenados en caché en el sistema de archivos. Para aplicaciones más grandes, es recomendable que utilices un controlador más robusto como Memcached o Redis. Incluso puedes configurar múltiples configuraciones de caché para el mismo controlador.
Ver post
Duilio Palacios
29/05/2020
Documentación, Laravel
Introducción
En muchas aplicaciones web modernas, los WebSockets son usados para implementar interfaces de usuarios actualizadas en tiempo real. Cuando algún dato es actualizado en el servidor, un mensaje es típicamente enviado a través de una conexión WebSocket para ser manejado por el cliente. Esto proporciona una alternativa más robusta y eficiente para monitorear continuamente tu aplicación en busca de cambios.
Para asistirte en la construcción de ese tipo de aplicaciones, Laravel hace fácil «emitir» tus eventos a través de una conexión WebSocket. Emitir tus eventos te permite compartir los mismos nombres de eventos entre tu código del lado del servidor y tu aplicación JavaScript del lado de cliente.
Antes de sumergirnos en la emisión de eventos, asegúrate de haber leído toda la documentación de Laravel sobre eventos y listeners.
Ver post
Duilio Palacios
29/05/2020
Documentación, Laravel
Introducción
¿Quieres comenzar rápido? Instala el paquete de Composer laravel/ui
y ejecuta php artisan ui vue --auth
en una aplicación de Laravel nueva. Luego de migrar tu base de datos, navega hasta http://your-app.test/register
o cualquier otra URL asignada a tu aplicación. Este simple comando se encargará de maquetar todo tu sistema de autenticación, ¡incluyendo el restablecimiento de contraseñas!.
La mayoría de las aplicaciones web proporcionan una forma para que los usuarios restablezcan sus contraseñas olvidadas. En lugar de forzarte a reimplementar esto en cada aplicación, Laravel proporciona métodos convenientes para enviar recordatorios de contraseñas y realizar restablecimientos de contraseñas.
Antes de usar las características de restablecimiento de contraseñas de Laravel, tu usuario debe usar el trait Illuminate\Notifications\Notifiable
.
Consideraciones de la base de datos
Para comenzar, verifica que tu modelo App\User
implementa el contrato Illuminate\Contracts\Auth\CanResetPassword
. El modelo App\User
incluido con el framework ya implementa esta interfaz y usa el trait Illuminate\Auth\Passwords\CanResetPassword
para incluir los métodos necesarios para implementar la interfaz.
Generando la migración para la tabla de tokens de restablecimiento
Luego, una tabla debe ser creada para almacenar los tokens de restablecimiento de contraseña. La migración para está tabla está incluida con Laravel por defecto y se encuentra en el directorio database/migrations
. Así que, todo lo que necesitas hacer es ejecutar tus migraciones de la base de datos:
php artisan migrate
Enrutamiento
Laravel incluye las clases Auth\ForgotPasswordController
y Auth\ResetPasswordController
que contienen la lógica necesaria para enviar enlaces de restablecimiento de contraseña por correo electrónico y restablecer contraseñas de usuarios. Todas las rutas necesarias para realizar restablecimiento de contraseñas pueden ser generadas usando el paquete de Composer: laravel/ui
:
composer require laravel/ui --dev
php artisan ui vue --auth
Vistas
Para generar todas las vistas necesarias para el restablecimiento de contraseñas, puedes usar el paquete de Composer laravel/ui
:
composer require laravel/ui --dev
php artisan ui vue --auth
Estas vistas están ubicadas en resources/views/auth/passwords
. Eres libre de personalizarlas según sea necesario para tu aplicación.
Después de restablecer contraseñas
Una vez que has definido las rutas y vistas para restablecer las contraseñas de tus usuarios, puedes acceder a la ruta en tu navegador en /password/reset
. El ForgotPasswordController
incluido con el framework ya incluye la lógica para enviar los correos con el enlace de restablecimiento, mientras que ResetPasswordController
incluye la lógica para restablecer las contraseñas de los usuarios.
Luego de que una contraseña es restablecida, la sesión del usuario será automáticamente iniciada y será redirigido a /home
. Puedes personalizar la ubicación de redirección definiendo una propiedad redirectTo
en ResetPasswordController
:
protected $redirectTo = '/dashboard';
Por defecto, los tokens para restablecer contraseñas expiran luego de una hora. Puedes cambiar esto mediante la opción de restablecimiento de contraseñas expire
en tu archivo config/auth.php
.
Personalización
Personalización de los guards de autenticación
En tu archivo de configuración auth.php
, puedes configurar múltiples «guards», que podrán ser usados para definir el comportamiento de autenticación para múltiples tablas de usuarios. Puedes personalizar el controlador ResetPasswordController
incluido para usar el guard de tu preferencia sobrescribiendo el método guard
en el controlador. Este método debe retornar una instancia guard:
use Illuminate\Support\Facades\Auth;
/**
* Get the guard to be used during password reset.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
return Auth::guard('guard-name');
}
Personalización del broker de contraseña
En tu archivo de configuración auth.php
, puedes configurar múltiples «brokers» de contraseñas, que pueden ser usados para restablecer contraseñas en múltiples tablas de usuarios. Puedes personalizar los controladores ForgotPasswordController
y ResetPasswordController
incluidos para usar el broker de tu elección sobrescribiendo el método broker
:
use Illuminate\Support\Facades\Password;
/**
* Get the broker to be used during password reset.
*
* @return PasswordBroker
*/
public function broker()
{
return Password::broker('name');
}
Personalización del correo de reseteo
Puedes fácilmente modificar la clase de la notificación usada para enviar el enlace de restablecimiento de contraseña al usuario. Para comenzar, sobrescribe el método sendPasswordResetNotification
en tu modelo User
. Dentro de este método, puedes enviar la notificación usando cualquier clase de notificación que selecciones. El $token
de restablecimiento de contraseña es el primer argumento recibido por el método:
/**
* Send the password reset notification.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPasswordNotification($token));
}