Скажем, у меня есть форма с именем myform с полем ввода с именем myinput. По умолчанию symfony генерирует виджет HTML, например:
<input name = "myform[myinput]" ... >
Это не работает с моими текущими javascripts, и вместо этого мне нужно получить следующее:
<input name = "myinput" ...>
Я довольно много поискал и нашел 2 способа добиться этого:
getBlockPrefix() в классе типа формы.FormFactoryInterface::createNamed() и передайте null в качестве имени.Похоже, что первый метод не рекомендуется, поскольку он ограничивает возможность настройки рендеринга формы с использованием префиксных блоков.
2-й способ рекомендовали здесь и здесь.
Однако оба метода изменят имя формы на null, и в результате symfony сгенерирует такую форму:
<form name = "" ...>
Вероятно, это потому, что form_div_layout.html.twig выглядит так:
<form name = "{{ name }}" ...
Что не подтверждается как HTML5.
Согласно эта страница, «это не ошибка».
Я знаю, что могу переопределить блок form_start в шаблоне и полностью удалить имя, но похоже, что форма не предназначена для использования с пустыми именами в целом (следовательно, нет проверки длины имени в шаблоне).
Итак, мой вопрос: каков рекомендуемый и совместимый с HTML5 способ удаления префиксов входных имен для форм Symfony?




Это была ошибка отрисовки формы. Я отправил пул реквест в репозиторий Symfony, который был принят.
Пока изменение не будет выпущено, временным решением будет добавить этот код в вашу тему формы:
{# fix HTML5 validation of forms with null names #}
{% block form_start %}
{% set name = name|default(block_prefixes.1) %}
{{ parent() }}
{% endblock %}