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
yStr::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\Builder y Illuminate\Support\Collections por tanto, se debe usar el métodopluck()
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 propiedadhidden
del Modelo, se usará el métodomakeVisible()
. - El método
Collection::whereLoose()
fue eliminado debido a queCollection::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
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.