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

Отключение валидации при сабмите формы

HTML-атрибут formnovalidate (определенный только для элементов image и input[type=submit]) позволяет отключить проверку на стороне клиента при отправке формы.

В Symfony 4.4 кнопки отправки (SubmitType) определяют новый логический параметр validate для включения/отключения этой проверки:

use Symfony\Component\Form\Extension\Core\Type\SubmitType;
// ...

$builder->add('save', SubmitType::class);
$builder->add('save-as-draft', SubmitType::class, [
    'validate' => false,
]);

Добавлена поддержка кодов Alpha-3

Поле формы CountryType по умолчанию использует коды Alpha-2 для обозначения каждой страны (например, bw = Ботсвана, sg = Сингапур и т. д.). В Symfony 4.4 добавили новую опцию alpha3, чтобы вы могли использовать альфа-версию ISO 3166-1 -3 кода тоже (например, bwa = Ботсвана, sgp = Сингапур):

use Symfony\Component\Form\Extension\Core\Type\CountryType;
// ...

$builder->add('country', CountryType::class, [
    'alpha3' => true,
]);

В связи с этим в запросе на слияние #32988 Терье Братен добавил поддержку кодов Alpha-3 в компоненте Intl:

use Symfony\Component\Intl\Languages;
use Symfony\Component\Intl\Countries;

$languages = Languages::getAlpha3Names();
$isValidLanguage = Languages::alpha3CodeExists($alpha3Code);
$alpha3Code = Languages::getAlpha3Code($alpha2Code);

$countries = Countries::getAlpha3Names();
$isValidCountry = Countries::alpha3CodeExists($alpha3Code);
$alpha3Code = Countries::getAlpha3Code($alpha2Code);

Показать предпочтительные варианты дважды

Параметр preferred_choices опция в поле формы ChoiceType позволяет отображать некоторые варианты выбора в верхней части списка (например, сначала отображать наиболее популярные страны доставки в вашем магазине).

Хотя этот параметр удобен для большинства пользователей, другие путаются, потому что предпочтительные варианты больше не отображаются в полном списке вариантов. Вот почему, начиная с Symfony 4.4, предпочтительные варианты отображаются дважды: вверху списка выбора и в их исходном местоположении, если они не были предпочтительными.

Атрибут автоматического принятия

В Symfony 4.4, когда вы определяете опцию mimeTypes в валидаторе File, применяемом к полю формы FileType, значение опции mimeTypes также используется в атрибуте accept связанного <input type="file"/> HTML-элемента .

Это поведение применяется только при использовании угадывания типа формы и когда поле не определяет свое собственное допустимое значение.

Получение имени формы в тестах

При тестировании форм в функциональных тестах обычно используется некоторый код, подобный следующему, который жестко кодирует имя формы (my_form[…] как в этом примере):

$client = static::createClient();
$crawler = $client->request('GET', '/sign-up');
$formButton = $crawler->selectButton('submit');
$form = $formButton->form([
    'my_form[name]'     => '...',
    'my_form[password]' => '...',
    // ...
]);

В Symfony 4.4 добавили метод getName(), чтобы вы могли получить имя формы вместо его жесткого кодирования:

// ...
$form = $formButton->form();
$formName = $form->getName();
$client->submit($form, [
    $formName.'[name]'    => '...',
    $formName.'[password]' => '...',
]);