Hace algunos meses fue lanzada la versión 5.3 de laravel, en donde se introdujeron nuevas características como Mailables.

El pasado 24 de enero se lanzó la nueva versión 5.4.

uwu2nu1ksx2o8l5mxqv6_laravel-5-4-release-tweet

Esta nueva versión ha traído bastantes nuevas características donde paso a detallar.


Nuevos Middlewares

Con el lanzamiento de esta nueva versión, dos nuevos middlewares se están enviando ahora con el framework. Si no sabes lo que son los middlewares, echa un vistazo a esto.

Estos son:

  1. TRIM STRINGS MIDDLEWARE

Tal como su nombre indica, este middleware recorta los espacios adicionales de los datos de solicitud. Por ejemplo, si un usuario envía su correo electrónico a través de un formulario en su sitio web y escribe por error algún espacio extra después del correo electrónico. Este middleware automáticamente recortará espacios en blanco, por lo que si un usuario envía algo como esto.

'usuario@dominio.org    '

Debido a la existencia de este middleware
(\Illuminate\Foundation\Http\Middleware\TrimStrings::class) en App/Kernel.php se convierte en:

'usuario@dominio.org'
  1. CONVERT EMPTY STRINGS TO NULL

Tal y como indica su nombre, este middleware convierte cadenas vacías a nula. Es decir si un usuario envía un formulario con un campo vacío en lugar de obtener ” tendríamos un nulo.

Mensajes de Orden Superior

Esta es una característica que es posible que sea más fácil mostrar que explicar.

Imagina que tenemos una colección de publicaciones en el blog y queremos realizar una operación en cada elemento de la colección, normalmente haríamos esto:

$posts->each(function ($post) { return $post->schedule(TWITTER); });

Con estos mensajes podemos simplificar el código así:

$posts->each->schedule(TWITTER);

Y no se detiene aquí, podemos encadenarlos (de forma normal):

$posts->reject(function ($post) { return $post->archived; })->each(function ($post) { return $post->schedule(TWITTER); });

Se simplificaría de esta forma:

$posts->reject->archived->each->schedule(TWITTER);

Puedes echar un vistazo a GitHub.

 

De Elixir a Mix

tjmoql7vr8yfgo2rgb3u_laravel-mix

Laravel Elixir nos proporcionó una envoltura de gulp que hizo el desarrollo de activos más fácil.

La siguiente versión de Laravel Elixir está cambiando el sistema subyacente y se construirá en Webpack, en lugar de Gulp. Esto reemplazará al ecosistema de complementos, debido a un cambio tan significativo, era el momento de cambiar su nombre.

Además, Laravel Mix viene con una nueva función auxiliar llamada mix() que sirve como reemplazo de la función elixir().

Si tienes algún proyecto en donde usas Elixir puedes continuar usándolo, ya que todavía es compatible.

Enrutamiento Fluido

El sistema de enrutamiento en Laravel es ahora mucho más fluido. Con la versión anterior si queríamos nombrar una ruta debíamos hacer esto:

Route::get('user/{id}/profile', function ($id) {
             //
})->name('profile');

Ahora lo podemos hacer así:

Route::name('profile')->get('user/{id}/profile', function ($id) {
 // some closure action...
});

Podríamos registrar un nombre de ruta y un middleware:

Route::name('users.index')->middleware('auth')->get('users', function () {
            // acciones
});

Registrar un middleware con prefijo y grupo de rutas:

Route::middleware('auth')->prefix('api')->group(function () {
         // grupo de rutas
});

Registro de un middleware en un controlador de recursos:

Route::middleware('auth')->resource('photo', 'PhotoController');

Componentes y Slots

Los componentes y Slots nos permiten simplificar elementos HTML en áreas reutilizables.

En nuestra aplicación, normalmente tenemos componentes como modales, paneles de notificaciones, etc. Ahora podemos definirlos como componentes y reutilizarlos.

Para crear un componente, simplemente creamos un nuevo archivo blade y lo referimos usando esto:

@component('path.to.blade.file')
          Modal text go in here
@endcomponent

Real-Time Facades

Las Facades proporcionan una interfaz “estática” a las clases que están disponibles en el contenedor de servicio de la aplicación. Laravel cuenta con muchas Facades que proporcionan acceso a casi todas las características de Laravel. Estas sirven como “proxies estáticos” a las clases subyacentes en el contenedor de servicio, proporcionando el beneficio de una sintaxis concisa y expresiva mientras se mantiene más testabilidad y flexibilidad que los métodos estáticos tradicionales.

Un ejemplo que me viene a la mente es Auth. En laravel, accedemos a los datos de un usuario autenticado haciendo Auth::user(). Esta clase Auth es una Facade.

Ahora en Laravel 5.4, podemos crear Facades sobre la marcha. Todo lo que necesitamos hacer es un espacio de nombres en el espacio de nombres de Facade y podemos usar la clase como una Facade.

namespace Facade\App\User;

 

Laravel dusk

w0bmt5tetpm31nmihfza_laravel-dusk

Laravel Dusk proporciona una API de automatización y pruebas de navegador expresiva y fácil de usar. Por defecto, Dusk no requiere que instale JDK o Selenium en su máquina. En su lugar, Dusk utiliza una instalación independiente de ChromeDriver. Sin embargo, eres libre de utilizar cualquier otro controlador compatible con Selenium que desees.

Básicamente, significa que podemos probar nuestro código Laravel como lo haríamos en un navegador web.

 

Solucionado el error de la clave especificada es demasiado larga

Laravel 5.4 ha hecho un cambio en el conjunto de caracteres de base de datos predeterminado, y ahora es utf8mb4, que incluye soporte para almacenar emojis. Esto sólo afecta a las nuevas aplicaciones y mientras estés ejecutando MySQL v5.7.7 o superior no necesitas hacer nada.

Para aquellos que ejecutáis MariaDB o versiones anteriores de MySQL, podéis tener este error al intentar ejecutar migraciones:

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

Como se describe en la guía de Migraciones para solucionar esto todo lo que tienes que hacer es editar tu archivo AppServiceProvider.php y dentro del método boot establecer una longitud de cadena predeterminada:

use Illuminate\Support\Facades\Schema;

public function boot()
{
          Schema::defaultStringLength(191);
}

 

Y algunas características no explicadas

  • Controlador ingenioso con modelo Boilerplate: en términos simples, enlaces de modelo de ruta para controladores.
  • Archivos de lenguaje basados en JSON: esto significa que la traducción de texto en Laravel ahora se puede hacer con archivos JSON en lugar de archivos PHP. Aprende más.
  • Markdown Mailables: esto nos permite construir Mailables en laravel usando la sintaxis de Markdown.

 

Fuente (scotch.io)

Anuncios

Write your comment