La espera ha terminado, el día de ayer fue liberada la nueva versión del framework que trae muchas mejoras y nuevas características que resuelven problemas comunes en el desarrollo de aplicaciones y por supuesto nos ayudan a desarrollar proyectos de una manera rápida y moderna.

Laravel 5.3 es una versión general, por tanto tiene soporte de 6 meses para corrección de errores y 1 año para correcciones de seguridad.

Veamos un poco los cambios y las nuevas funcionalidades que incluye esta versión:

Laravel Scout

Es un sistema de búsqueda mediante cadenas de texto (fulltext) para Modelos del ORM Eloquent con el cual podrás implementar el API de Algolia directamente en tus aplicaciones de Laravel con la versión 5.3.

Scout permitirá la indexación y búsqueda de contenido de los modelos de Eloquent de una manera más fácil. Además, al ser una característica basada en «drivers» no sólo podrás usar Algolia sino que podrás construir tus propias integraciones utilizando cualquier otro servicio o sistema de búsqueda. Es un paquete opcional para Laravel por lo cual tendrás que agregarlo al archivo composer.json de la aplicación para instalarlo.

Laravel Passport

Es un paquete opcional que nos permite configurar en menos de 10 minutos todo lo necesario para que el sistema cuente con una autenticación mediante OAuth2. Esta funcionalidad se instala mediante el manejador de paquetes Composer, como un paquete extra, por lo cual se agrega el Service Provider y otras pequeñas configuraciones como lo es ejecutar las migraciones, entre otros.

Con este paquete podrás obtener un access token para un usuario por medio de un comando Artisan. Incluye componentes de Vue.js para la generación de token, su revocación y una autenticación API por defecto.

Laravel Mailable

Es un nuevo enfoque basado en clases que permiten el envío de correos de una manera más simple de usar que el Closure presente en las versiones anteriores, es decir, que podremos crear y enviar objetos tipo email.

Para crear una clase:

php artisan make:mail OrderShipped

Con esta clase creada en el método build puedes llamar a los métodos from, subject, view y attach para configurar la presentación y la entrega del correo, para luego enviarlo:

 Mail::to($request->user())->send(new OrderShipped($order));

Laravel Notifications

Es la nueva manera de enviar notificaciones a través de distintos canales o servicios como emails, SMS, Slack. Estas notificaciones pueden también ser almacenadas en la base de datos para que puedan ser mostradas en la web.

Una notificación se crea a partir del comando Artisan:

php artisan make:notification InvoicePaid

y luego de configurada se puede enviar por medio del método notify del trait Notificable de esta manera:

$user->notify(new InvoicePaid($invoice));

o a través del facade Notification:

Notification::send($users, new InvoicePaid($invoice));

Cambios en los directorios

El directorio app fue simplificado, eliminando las carpetas vacías de Events, Jobs, Listeners, y Policies que ahora serán agregadas cuando se ejecute el comando de Artisan make: de cada una de estas características.

Además fue movido y resestructurado el archivo /app/Http/routes.php que ahora se encuentra fuera del directorio app y dividido en routes/api.php y routes/web.php.

Para mayor información: Cambios en la estructura de carpetas y rutas en Laravel 5.3

migrate:rollback y migrate:refresh con nueva opción

Las migraciones tendrán una nueva característica en Laravel 5.3, se permitirá hacer rollback a un número específico de migraciones pasando la opción step en el comando php artisan migrate:rollback. Por ejemplo, si se quiere deshacer la última migración ejecutada:

php artisan migrate:rollback --step=1

Esto es útil cuando al ejecutar php artisan migrate y corren un grupo de migraciones en un solo batch y con esta característica podrás solo regresar el número de migraciones que indiques en step en vez del batch completo.

De igual forma, también se podrá hacer refresh de un número indicado de migraciones, es decir, cuando queremos ejecutar php artisan migrate:refresh podemos especificar el número de migraciones que serán revertidas y que luego serán re-ejecutadas. Ejemplo, podemos hacer:

php artisan migrate:refresh --step=1

y se hará rollback de la última migración y luego se volverá a ejecutar dicha migración.

Variable $loop en @foreach de Blade

En Blade ahora tendremos una nueva variable $loop cuando estemos trabajando con las directivas @foreach y @forelse:

@foreach ($users as $user)

    @if ($loop->first)
        Primer usuario: 
    @endif

    @if ($loop->last)
        Último usuario:
    @endif

    {{ $user->name }}

@endforeach

Esta variable $loop contendrá información sobre la actual iteración del bucle cuando se llama dentro de él:

  • {{ $loop->index }} – La iteración actual, comienza con 1.
  • {{ $loop->remaining }} – El número de iteraciones que quedan para terminar, finaliza en 0.
  • {{ $loop->count }} – El tamaño del iteratee.
  • {{ $loop->first }} – Si la actual iteración es la primera. (booleano)
  • {{ $loop->last }}- Si la actual iteración es la última. (booleano)
  • {{ $loop->depth }} – La profundidad dentro de un bucle anidado.
  • {{ $loop->parent }} – Información del bucle padre directo.
  • {{ $loop->parent->first }} – Esto verifica si el bucle padre está en la primera iteración.

Sin embargo, fuera del bucle $loop será null.

Puedes conocer más detalladamente esta característica en: La nueva variable $loop en la directiva foreach de Blade

Método Router::controller eliminado

En Laravel 5.3 ya no estará disponible el método Router::controller usado para definir las rutas de un controlador de manera implicita, es decir, creando una sola ruta para manejar todas las acciones del controlador.

Este método trae muchos problemas: hace que la definición de las rutas sea confusa, debido a que éstas no están directamente referenciadas en el archivo routes.php. Además, puede causar errores de seguridad se descuida la asignación de middleware adecuada en el controlador. También puede provocar problemas en el uso de parámetros para las rutas, pues se crean combinaciones de rutas inesperadas.

Es probable que este método esté disponible como un paquete y dependerá del desarrollador si decide seguir usándolo o cambiar a utilizar definiciones de rutas explicítamente.

Funciones eliminadas

En Laravel 5.3 serán eliminadas algunas funciones o métodos que habían sido depreciados en Laravel 5.2:

  • Str::randomBytes y Str::equals serán eliminadas para usar los métodos de PHP random_bytes() y hash_equals().
  • El método lists() también será eliminado de Illuminate\Database\Eloquent\Builder, Illuminate\Database\Query\BuilderIlluminate\Support\Collections por tanto, se debe usar el método pluck() directamente. Por Ejemplo, para una colección:
    $collection = collect([
        ['product_id' => 'prod-100', 'name' => 'Desk'],
        ['product_id' => 'prod-200', 'name' => 'Chair'],
    ]);
    
    $names = $collection->pluck('name');
    $names->all();
    

    Se obtiene como resultado: [‘Desk’, ‘Chair’]

  • El helper array_build() será eliminado del framework y no estará de ninguna manera disponible.
  • El método withHidden() de Illuminate\Database\Eloquent\Model y de Illuminate\Database\Eloquent\Collection será igualmente removido. Por tanto, para hacer visibles ciertos atributos luego que hayan sido definidos como ocultos con la propiedad hidden del Modelo, se usará el método makeVisible().
  • El método Collection::whereLoose() fue eliminado debido a que Collection::where() ahora soporta operadores.

Collection::where() soporta operadores

Hasta Laravel 5.2 el método Collection::where() acepta dos parámetros: where($key, $value) donde este método solo se usa el operador «=» para hacer la comparación, pero ahora en Laravel 5.3 el método where recibirá tres parámetros: where($key, $operator, $value = null) permitiendo filtrar las colecciones con el operador dado. En caso de usar el método con solo dos parámetros: $key y $operator Laravel hará una comparación flexible o loose. Ejemplo:

$collection = collect([['score' => '3'], ['score' => 3]]);

// Por defecto, se hace una comparación flexible o loose 
$collection->where('score', 3);
// Resultado [['score' => '3'], ['score' => 3]]

$collection->where('score', '=', 3);
$collection->where('score', '==', 3);
// Resultado [['score' => '3'], ['score' => 3]]

$collection->where('score', '===', 3);
// Resultado [['score' => 3]]

Los operadores que podemos usar son: = == === <= >= < > <> != !==

Esta es la razón por la que el método  Collection::whereLoose() fue eliminado.

Nuevo helper tap()

En Laravel 5.3 se ha añadido un nuevo helper al archivo src/Illuminate/Support/helpers.php llamado tap() el cual tendrá como argumentos $value y $callback, donde $callback es un Clousure o función anónima que el helper llamará usando como argumento propio el valor de $value  y como valor de retorno devolverá la referencia de $value original.

Versión de PHP mínima

Laravel 5.3 soportará PHP 5.6.4 o superior. HHVM ya no será oficialmente soportado pues no contiene las misma características del lenguaje que PHP 5.6 en adelante.

Hay muchos otros cambios que podrás conocer poco a poco con nuestro nuevo Curso de novedades en Laravel 5.3.

Instalación de Laravel 5.3

Para empezar a usar Laravel 5.3, recuerda tener instalado Composer y lo puedes realizar de dos maneras:

A través del instalador de Laravel

Instalándolo en primer lugar de forma global en tu equipo:

composer global require "laravel/installer"

Asegúrate de colocar el directorio ~/.composer/vendor/bin en tu “PATH” para que el ejecutable de Laravel pueda ser ejecutado desde cualquier directorio de tu sistema.

Luego de tenerlo configurado puedes ejecutar el comando:

laravel new nombre-proyecto

y se creará un nuevo directorio que contiene la instalación de Laravel con sus dependencias ya instaladas.

A través de Composer create-project

Ejecutando el comando:

composer create-project --prefer-dist laravel/laravel nombre-proyecto

En Styde.net, estamos trabajando ahora mismo para enseñarte a actualizar tus aplicaciones a Laravel 5.3 así como preparando nuevas lecciones para el Curso de novedades en Laravel 5.3 no dejes de visitarnos y compartir nuestros tutoriales que te ayudarán a conocer todo lo nuevo de Laravel.

Material relacionado

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.