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.

