Laravel se mantiene en constante desarrollo, prueba de ello son las nuevas mejoras que trae la última versión, la 5.2.23, las cuales veremos a continuación:
Regla de validación in_array
Con esta regla se puede validar que un valor de una clave exista en otra clave relacionada. Por ejemplo para asegurar que todos los user_id
de devices
existan en el array users
se hace:
Validator::make( [ 'devices' => [['user_id' => 1], ['user_id' => 2]], 'users' => [['id' => 1, ['id' => 2]]] ], ['devices.*.user_id' => 'in_array:users.*.id'] );
Arr::first() y Arr::last() ahora tiene el callback opcional
Hasta Laravel 5.2.22 estos dos métodos exigían dos parámetros:
array = [100, 200, 300]; //Devuelve 200 Arr::first($array, function ($key, $value) { return $value >= 150; });
Pero ahora el callback (segundo parámetro) es opcional por lo que también podemos hacer:
$array = [100, 200, 300]; // Devuelve 100 Arr::first($array); // Devuelve 300 Arr::last($array);
Es también válido para los helpers array_first y array_last
Middleware en los controladores
Ahora es posible registrar mútiples middleware en una misma sentencia:
$this->middleware(['auth', 'subscribed'], ['only' => ['edit', 'update']]);
Nuevas directivas en Blade
@php y @endphp
Con la cual podemos escribir sentencias de PHP:
@php($count = 1) @php(++ $count)
y para múltiples líneas:
@php $now = new DateTime(); $environment = isset($env) ? $env : "testing"; @endphp
@unset
Para hacer el llamado a la función de PHP unset():
@unset($count)
Sobreescribir directivas de Blade
Antes de esta versión no era posible extender Blade sobreescribiendo sus directivas, ahora sí se puede hacer.
Escapar directivas de Blade
Para evitar que se compilen una directiva de Blade podemos colocar un @ adicional a la directiva de esta manera:
@continue //resultado: <?php continue; ?> @@continue //resultado: @continue
En caso de querer escapar múltiples sentencias, se puede usar la nueva directiva de Blade @verbatim:
@verbatim @if {{ $var }} @endif @endverbatim
Nuevo mail drive para SparkPost
The next release of Laravel 5.2 will contain a mail driver for @SparkPost thanks to a community contribution!
— Taylor Otwell (@taylorotwell) March 7, 2016
Nuevo método monthlyOn() para programación de tareas
$schedule->call(function () { DB::table('shopping_list')->delete(); })->monthlyOn(4, '12:00');
Nuevo método isLocate()
En vez de realizar esto:
if (app()->getLocale() == 'es')
Ahora se puede hacer:
if (app()->isLocale('en'))
Consultas a los campos JSON de MySQL 5.7 y Postegres con query builder
En la versión 5.7 de MySQL se introdujo una nueva columna tipo JSON, por lo que ahora en Laravel 5.2.23 se puede hacer consultas a atributos de ese tipo:
Supongamos que se tiene una tabla users con una columna tipo JSON, que tiene los siguientes valores:
{"en":"name","ar":"nom"}
Podrás consultas sus valores con la siguiente sintaxis:
User::where('name->en', 'name')->get();
incluso se puede usar el operador -> para consultar valores anidados:
User::where('contacts->phone->home', 1234);
Notas:
- Para Postgres funciona la misma sintaxis, Laravel convertirá el formato
column->key->key->...
a una ruta de JSON válida antes de ser enviado al driver de base de datos. - En MySQL el resultado será un string JSON (
"name"
en vez dename
) por tanto, se necesita usarjson_decode()
antes de ser mostrado
Nuevos helpers para las pruebas: seeElement() y dontSeeElement()
Teniendo este elemento en una vista:
<image width="100" height="50">
Se pueden usar los helpers de la siguiente manera para que la prueba pase:
$this->seeElement('image', ['width' => 100, 'height' => 50]); $this->dontSeeElement('image', ['class' => 'video']);
Otras mejoras
- Sabes que se puede hacer esto:
User::whereNameAndEmail('jon', '[email protected]')->first(); User::whereNameAndEmailOrPhone('jon', '[email protected]', '123321')->first(); DB::table('users')->whereEmailOrUsername('[email protected]', 'themsaid')->first();
- En vez de hacer esto:
if(!$item){ abort(404); }
Puedes hacer esto:
abort_unless($item);
o también puedes tener algo como esto:
abort_if($item->is_hidden);
Nota
Esta publicación es una traducción de What’s new in laravel 5.2.23
Material relacionado
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.