Новое в Symfony 5.1: Улучшения формы

Добавлен параметр html5 в ColorType

Добавили новую опцию html5 в поле формы ColorType. Если для этого параметра установлено значение true, тип формы проверяет, соответствует ли его значение цветовому формату HTML5, то есть /^#[0-9a-f]{6}$/i.

Добавлен параметр rounding_mode в PercentType

Новый параметр rounding_mode поля формы PercentType полезен в сочетании с параметром масштабирования, который определяет допустимое количество десятичных знаков перед применением округления.

Значения rounding_mode — это любые константы PHP \NumberFormatter (\NumberFormatter::ROUND_CEILING, \NumberFormatter::ROUND_HALFEVEN и т. д.)

Разрешено HTML-содержимое в ярлыках форм

По умолчанию содержимое HTML экранируется в метках формы из соображений безопасности. Новый логический параметр label_html позволяет полю формы включать HTML-содержимое в свои метки, что полезно для отображения значков внутри кнопок, ссылок и некоторого форматирования в метках флажков/переключателей и т. д.

// 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' => ' Save',
                'label_html' => true,
            ])
        ;
    }
}

Упрощенная reference_date в TimeType

В поле формы с типом TimeType, когда вы используете разные значения для model_timezone и view_timezone, вы должны установить опцию reference_date. В Symfony 5.1, когда не задано значение reference_date, для view_timezone по умолчанию используется настроенный model_timezone.

Лучшие значения по умолчанию для параметра inputmode

HTML-атрибут inputmode сообщает браузерам, какие данные могут быть введены пользователем при редактировании элемента или его содержимого (например, номер телефона, адрес электронной почты, десятичное число и т. д.)

Уже используем эту опцию в полях формы, таких как UrlType, но в Symfony 5.1 решили настроить лучшие значения по умолчанию для режима ввода в нескольких полях:

  • inputmode='email' для EmailType;
  • inputmode='search' для SearchType;
  • inputmode='tel' для TelType;

Выбор улучшений

Новая опция choice_filter позволяет вам фильтровать список вариантов по умолчанию, настроенный для данного поля формы. Используйте закрытие PHP, чтобы решить, следует ли сохранить или удалить выбор (и объедините его с параметрами настраиваемого типа формы для максимальной гибкости):

// 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 is a custom form type option
                // closure returns TRUE to keep the choice and FALSE to remove it
                'choice_filter' => $allowedCountries ? function ($countryCode) use ($allowedCountries) {
                    return in_array($countryCode, $allowedCountries, true);
                } : null,
            ])
        ;
    }

Кроме того, обновили внутреннее устройство Symfony Forms для поддержки кеширования списков выбора на основе опций (см. pull request #30994), обеспечивая повышение производительности от 15% до 30%.

Наконец, представили AbstractChoiceLoader, чтобы упростить выбор реализаций с отложенной загрузкой и обработать глобальную оптимизацию (см. pull request #34550).