En esta charla de Laracon Online 2018, Taylor Otwell nos habla sobre el lanzamiento de Laravel 5.6 y los nuevos features que incluye esta versión. Ésta es una versión de mantenimiento no muy diferente a Laravel 5.5, sin embargo, como cada versión nueva de Laravel, incluye características muy interesantes, vamos a verlas:
Mejoras al Logging en Laravel
La personalización del logging de Laravel, ahora es mucho más potente y más parecida a otras partes del framework. Laravel 5.6 incluye un archivo llamado logging.php en la carpeta de configuración, donde puedes agregar «canales» de logging (channels
), por ejemplo:
<?php return [ 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single'], ], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', ], //.... 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => 'critical', ], ];
En tu aplicación puedes usar el log de la siguiente manera:
<?php // Uso del canal por defecto: Log::info('Debug information...', ['user_id' => 1]); // Enviar info al log para los canales single y daily: Log::stack(['single', 'daily'])->info('Something happened!'); // Enviar info al log de canales personalizados: Log::channel('custom')->info('Something else'); Log::channel('slack')->critical('The system is down!!!');
Ejecutar comandos en un solo servidor
<?php $schedule->command('sleep') ->onOneServer();
Esta nueva opción nos permite que una aplicación que está ejecutándose en múltiples servidores limite la ejecución de comandos que cumplen la misma tarea al mismo tiempo a un solo servidor.
Limitar número de peticiones procesadas
Laravel nos permite limitar la cantidad de veces que queremos permitirle a un usuario acceder a una ruta utilizando el middleware throttle
, como puedes ver a continuación:
<?php Route::get('/throttle', function () { return 'Access granted!'; })->middleware('throttle:2,1');
El primer argumento del middleware se refiere a la cantidad de intentos máximos para acceder a la ruta y el segundo argumento es la cantidad de minutos. Es decir, en este ejemplo, un usuario podría acceder a la url '/throttle'
2 veces por minuto.
Laravel 5.6 nos permite definir un límite personalizado, en el ejemplo debajo pasamos el argumento rate_limit
:
<?php Route::get('/user-throttle', function () { return 'Access Granted!'; })->middleware('throttle:rate_limit,1');
Si el usuario está conectado, Laravel va a obtener la información de la propiedad rate_limit
del modelo de dicho usuario. Es decir, va a llamar a auth()->user()->rate_limit
y a usar el valor retornado por esta propiedad como el número máximo de intentos permitidos.
Descarga de archivos con Storage::download
El nuevo método download
de la clase Storage
nos permite ofrecer descarga de archivos de manera muy sencilla:
<?php // Uso simple: Storage::download('nombre-de-archivo.txt'): // Darle un nombre personalizado al archivo: Storage::download('nombre-de-archivo.txt', 'nombre-personalizado.txt'):
Uso de Broadcasting con clases de tipo «Channel»
En Laravel 5.6 es posible definir clases para autorizar canales, lo cual es útil en situaciones donde tenemos muchas reglas y funciones anónimas en el archivo routes/channels.php
:
<?php use App\Broadcasting\OrderChannel; Broadcast::channel('order.{order}', OrderChannel::class);
Con php artisan make:channel
es posible crear una nueva clase Channel
:
<?php namespace App\Broadcasting; use App\User; class MyChannel { //... /** * Authenticate the user's access to the channel. * * @param \App\User $user * @return array|bool */ public function join(User $user) { // } }
Generación de controladores de recursos para APIs
Laravel 5.6 trae una nueva opción para generar controladores de tipo recurso para API, se trata por supuesto de la opción --api
que fue agregada al componente make:controller
:
php artisan make:controller TestApiController --api
Esta opción generará un controlador de tipo recurso sin los métodos create
ni edit
que se usan típicamente para mostrar formularios HTML y por supuesto no tienen mucha utilidad cuando estamos desarrollando una API.
Personalización de formatos de fechas y horas en Eloquent
Eloquent ya incluía la opción de $casts
para poder transformar un atributo de un tipo a otro, por ejemplo un TINYINT
a boleano, como ya hemos aprendido en los Cursos en Styde.
Ahora Laravel 5.6 nos permite personalizar el formato de los atributos que convirtamos a fechas:
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; protected $casts = [ 'last_seen_at' => 'datetime:d-m-Y' ]; }
En este ejemplo la columna last_seen_at
(suponiendo que exista) será convertida a una fecha con el formato d-m-Y
.
Argon hashing
Una alternativa a bcrypt
para generar hashes es utilizar el driver argon
en Laravel 5.6, el cual acepta más opciones de configuración que bcrypt
:
<?php // Uso del driver argon: Hash::driver('argon')->make('secret'); // Uso del driver argon con opciones personalizadas: Hash::driver('argon')->make('secret', [ 'threads' => 4, 'memory' => 2048, 'time' => 2000, ]);
El segundo llamado con más opciones incrementará el tiempo en el que se genera el hash.
Collision: Nueva dependencia de desarrollo
El paquete Collision, utilizado solo en el ambiente de desarrollo, permite que al momento de recibir una excepción en la terminal esta sea mucho más agradable a la vista, permitiéndonos comprender mejor el error:
Cambios a la generación de módulos de autenticación
Las plantillas de autenticación y registro que son copiadas a tu aplicación a través del uso del comando php artisan make:auth
, han sido actualizadas para usar Bootstrap 4 que ya está disponible en su versión oficial.
Además el paginador ya usa los estilos de Bootstrap 4 por defecto, pero puedes usar los de Bootstrap 3 si agregas el siguiente código a tu AppServiceProvider
:
<?php namespace App\Providers; use Illuminate\Pagination\Paginator; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function boot() { Paginator::useBootstrapThree(); } //... }
Nueva versión de Laravel Spark
Taylor también nos contó que la versión de Spark 6.0 estará disponible la semana próxima, es una actualización gratuita para quienes hayan comprado Spark recientemente y habrá un descuento de 50% para quienes ya hayan comprado Spark antes.
Material relacionado
- Curso de Laravel 5.5 desde cero
- Limitar el número de accesos a una API con el Middleware ThrottleRequests
- Manipular fechas con el componente Carbon en Laravel 5
- Registro de actividad con Laravel logging
- Creación de comandos a través de funciones anónimas o closures en Laravel 5.3
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.