Настройка
- PHP 7.1.3
- Symfony 4
- Bootstrap 4
- Twig 4.3
- JQuery / Ajax
Все выполняется в docker контейнерах (MySQL 8 и nginx)
Для Я использую Creative Tim's Bootstrap Панель инструментов материала (https://www.creative-tim.com/product/material-dashboard-pro)
Issue
Итак, используя Symfony 4 формы и создание стандартного раскрывающегося списка выбора работает без ошибок при использовании пользовательских блоков для рендеринга:
{%- block choice_widget_collapsed -%}
{% if attr.hidden is not defined or attr.hidden == false %}
{%- set attr = attr|merge({class: (attr.class|default('') ~ ' selectpicker')|trim}) -%}
{% endif %}
{%- if required and placeholder is none and not placeholder_in_choices and not multiple and (attr.size is not defined or attr.size <= 1) -%}
{% set required = false %}
{%- endif -%}
<select {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %} class="{% if required %}required{% endif %} bmd-label-static"
data-style="select-with-transition">
{%- if placeholder is not none -%}
<option value=""{% if required and value is empty %} selected="selected"{% endif %}>{{ placeholder != '' ? (translation_domain is same as(false) ? placeholder : placeholder|trans({}, translation_domain)) }}</option>
{%- endif -%}
{%- if preferred_choices|length > 0 -%}
{% set options = preferred_choices %}
{{- block('choice_widget_options') -}}
{%- if choices|length > 0 and separator is not none -%}
<option disabled="disabled">{{ separator }}</option>
{%- endif -%}
{%- endif -%}
{%- set options = choices -%}
{{- block('choice_widget_options') -}}
</select>
{%- endblock choice_widget_collapsed -%}
Всякий раз, когда я отправляю форму с выбором в базовой форме, опция выбора передается обратно контроллер (используя ajax) как часть формы.
Однако, когда форма является типом коллекции внутри формы (объекты-прототипы), как показано ниже:
$builder
->add('billRatesInput',
CollectionType::class,
[
'entry_type' => BillRatesInputForm::class,
'entry_options' =>
[
'label' => false,
'disabled' => $options['isDisabled']
],
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
]
)
;
Когда родитель форма отправлена, она принимает все значения родительской формы и все дочерние формы (BillRatesInputForm
), кроме значений, связанных с полями выбора.
Если я удаляю шаблон блока и разрешаю Если это поле выбора c, отправка работает без ошибок, но с шаблоном блока отправка не работает, а только для дочерних форм.