Nuevo en Symfony 4.3: Nuevas mejoras en los formularios

Symfony 4.3 incluye mejoras importantes relacionadas con los formularios, tales como temas de formulario más sencillos y algunas mejoras en la traducción de formularios. Este artículo explica algunas de las otras mejoras que incluye Symfony 4.3 relacionadas con los formularios.

Mantener el orden de las opciones destacadas

El campo de formulario ChoiceType que se usa para mostrar elementos de tipo <select>, define una opción llamada preferred_choices para mostrar algunas opciones destacadas (ej. mostrar la lista completa de países del mundo, pero arriba del todo mostrar 5 o 6 de los países más comunes en tu proyecto):

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Intl\Countries;
 
->add('country', ChoiceType::class, [
    'choices' => Countries::getNames(),
    'preferred_choices' => ['US', 'JP', 'CN'],
])

En las versiones de Symfony anteriores, las opciones destacadas se ordenaban automáticamente como el resto de opciones (en el ejemplo anterior, se mostrarían en este orden: CN, JP, US). En Symfony 4.3 las opciones destacadas se muestran siempre en el mismo orden en el que las has definido.

Esta funcionalidad fue contribuida por Valentin Udaltsov en el pull request #30985.

Mejorado el comando para depurar formularios

El comando debug:form es muy útil para depurar formularios y en Symfony 4.3 se ha mejorado. Si un campo de formulario define opciones asociadas con normalizadores del componente OptionsResolver, el comando ahora los muestra:

Esta funcionalidad fue contribuida por Yonel Ceruto en el pull request #31082.

Atributos de fila en los temas de formulario

Actualmente, cuando quieres hacer algún pequeño retoque en el bloque form_row de un tema de formulario (como por ejemplo añadirle una clase CSS) tienes que redefinir el bloque form_row entero. Symfony 4.3 añade una nueva opción de configuración llamada row_attr para definir los atributos de ese bloque:

{% block form_row %}
    {% set row_attr = { class: 'some_custom_class' } %}
    {{ parent() }}
{% endblock %}

Esta funcionalidad fue contribuida por Alexander Schranz en el pull request #30320.

Errores personalizados en los data mappers

En ocasiones, cuando se usan data mappers, el mensaje de error genérico que se muestra cuando se produce un error no es muy claro. Así que en Symfony 4.3 puedes definir un mensaje de error diferente para los usuarios de la aplicación:

class MoneyDataMapper implements DataMapperInterface
{
    public function mapDataToForms($data, $forms)
    {
        $forms = iterator_to_array($forms);
        $forms['amount']->setData($data ? $data->getAmount() : 0);
        $forms['currency']->setData($data ? $data->getCurrency() : 'EUR');
    }
 
    public function mapFormsToData($forms, &$data)
    {
        $forms = iterator_to_array($forms);
 
        $amount = $forms['amount']->getData();
        if (!is_numeric($amount)) {
            // este es el mensaje en tus logs
            $failure = new TransformationFailedException('Expected numeric value');
 
            // este es el mensaje que verán los usuarios
            $failure->setInvalidMessage('Money amount should be numeric. {{ amount }} is invalid.', [
                '{{ amount }}' => json_encode($amount)
            ]);
 
            throw $failure;
        }
 
        $data = new Money($forms['amount']->getData(), $forms['currency']->getData());
    }
}

Esta funcionalidad fue contribuida por Maxime Steinhausser en el pull request #20978.

Símbolo de porcentaje personalizable

El campo de formulario PercentType muestra por defecto el símbolo % al lado de los valores. En symfony 4.3 esto es configurable gracias a una nueva opción llamada symbol. Si su valor es false, no se muestra ningún símbolo. Si su valor es una cadena de texto (ej. ), se muestra ese contenido al lado de los valores:

use Symfony\Component\Form\Extension\Core\Type\PercentType;
 
->add('salinity', PercentType::class, [
    'symbol' => '‰',
])

Esta funcionalidad fue contribuida por Oskar Stark en el pull request #30433.

Fuente: New in Symfony 4.3: More Form improvements

Comentarios

Publicada el

20 de junio de 2019

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.