Nuevo en Symfony 5.1: Mejoras en los formularios

Nueva opción html5 en ColorType

El campo de formulario ColorType ahora define una opción llamada html5. Cuando esa opción es true, el valor del campo se comprueba para que sea un color válido según el formato de colores de HTML 5, que es /^#[0-9a-f]{6}$/i.

Esta funcionalidad fue contribuida por Thomas Calvet en el pull request #36302.

Nueva opción rounding_mode en PercentType

La nueva opción rounding_mode del campo de formulario PercentType es útil cuando se combina con la opción scale, que define el número de decimales que se permiten antes de rendondear un valor.

Los posibles valores de rounding_mode son las constantes definidas en la clase \NumberFormatter de PHP (\NumberFormatter::ROUND_CEILING, \NumberFormatter::ROUND_HALFEVEN, etc.)

Esta funcionalidad fue contribuida por Vincent Langlet en el pull request #35729.

Contenidos HTML en los labels

Los contenidos HTML se escapan antes de mostrarlos en los <label> de los formularios por motivos de seguridad. La nueva opción label_html permite evitar esto, lo que es útil cuando se muestran iconos dentro de botones, enlaces, contenidos HTML en checkbox/radiobutton, etc.

// src/Form/Type/TaskType.php
namespace App\Form\Type;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
 
class TaskType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            // ...
            ->add('save', SubmitType::class, [
                'label' => '<i class="far fa-save"></i> Guardar',
                'label_html' => true,
            ])
        ;
    }
}

Esta funcionalidad fue contribuida por Przemysław Bogusz en el pull request #31375.

Simplificada la opción reference_date en TimeType

En el campo de formulario TimeType, cuando indicas diferentes valores para las opciones model_timezone y view_timezone, debes establecer también la opción reference_date. En Symfony 5.1, cuando no se define ninguna opción reference_date, la opción view_timezone toma por defecto el valor de la opción model_timezone.

Esta funcionalidad fue contribuida por Christian Flothmann en el pull request #35205.

Mejores valores por defecto para la opción inputmode

El atributo inputmode de HTML indica a los navegadores el tipo de dato que el usuario va a introducir en un campo de formulario (ej. un número de teléfono, una dirección de email. un número decimal, etc.)

Symfony ya usa esta opción en campos como UrlType, pero en Symfony 5.1 hemos decidido configurar su valor por defecto en otros campos:

  • inputmode = 'email' en EmailType
  • inputmode = 'search' en SearchType
  • inputmode = 'tel' en TelType

Esta funcionalidad fue contribuida por Artem Henvald en el pull request #34986.

Mejoras en ChoiceType

La nueva opción choice_filter permite filtrar las opciones por defecto definidas para un campo de formulario:

// src/Form/Type/AddressType.php
namespace App\Form\Type;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CountryType;
use Symfony\Component\Form\FormBuilderInterface;
 
class AddressType extends AbstractType
{
    // ...
 
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            // ...
            ->add('country', CountryType::class, [
                // $allowedCountries es una opción definida en este cmapo de formulario
                // el closure debe devolver TRUE para mantener el valor y FALSE para eliminarlo
                'choice_filter' => $allowedCountries ? function ($countryCode) use ($allowedCountries) {
                    return in_array($countryCode, $allowedCountries, true);
                } : null,
            ])
        ;
    }

Esta funcionalidad fue contribuida por Jules Pietri en el pull request #35733.

Además, hemos mejorado las funcionalidades internas de los formularios para cachear las listas de valores en los campos ChoiceType (ver pull request #30994) lo que da una mejora de rendimiento de entre el 15% y el 30%.

Por último, hemos añadido una clase AbstractChoiceLoader que simplifica la funcionalidad que carga las listas de valores bajo demanda, lo que permite otras optimizaciones (ver pull request #34550).


Fuente: New in Symfony 5.1: Form improvements

Comentarios

Publicada el

19 de mayo de 2020

Etiquetas

Proyectos Symfony destacados

La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más

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