Nuevo en Symfony 5.1: Mejoras en el componente OptionsResolver

El componente OptionsResolver te ayuda a configurar objetos mediante arrays de opciones. En Symfony 5.1 lo hemos mejorado con las siguientes opciones.

Interfaz fluida

Resulta habitual configurar varias características para una misma opción. Gracias al nuevo método define(), puedes hacerlo con una interfaz fluida y así evitar la repetición del nombre de la opción en varios métodos:

// Antes
$resolver->setRequired('host');
$resolver->setDefaults(['host' => 'smtp.example.org']);
$resolver->setAllowedTypes('host', 'string');
 
// Después
$resolver->define('host')
    ->required()
    ->default('smtp.example.org')
    ->allowedTypes('string');

Esta funcionalidad fue contribuida por Lorenzo Millucci en el pull request #33848.

Información extra para cada opción

En ocasiones el nombre de una opción o su comportamiento dinámico hace que los mensajes de error sean difíciles de entender. Para mejorar la DX (experiencia de usuario para programadores/as) hemos añadido un nuevo método que permite definir un mensaje de descripción/ayuda/depuración de la opción.

Considera la siguiente opción:

$resolver->setAllowedValues('scheduledAt', static function ($value): bool {
    return $value >= new \DateTime('now');
});

El mensaje de error estándar mostrado por Symfony es:

The option "scheduledAt" with value DateTime is invalid.

Sin embargo, si añades el método info() o setInfo():

// usando la sintaxis tradicional
$resolver->setInfo('scheduledAt', 'It must be a date in the future.');
 
// usando la interfaz fluida
$resolver->define('scheduledAt')
    // ...
    ->info('It must be a date in the future.');

El mensaje de error ahora es mucho más claro:

The option "scheduledAt" with value DateTime is invalid.
Info: It must be a date in the future.

Esta funcionalidad fue contribuida por Yonel Ceruto, de la comunidad hispana, en el pull request #35400.


Fuente: New in Symfony 5.1: OptionsResolver improvements

Comentarios

Publicada el

15 de mayo de 2020

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.