для простого поля, я просто использую следующий код:
<div class="form-group form-group-sm{{ not form.name.vars.valid ? ' has-error' }}">
{{ form_label(form.name, 'name') }}
<div class="col-sm-9">
{{ form_widget(form.name, {'attr': {'placeholder': 'name'}}) }}
{{ form_errors(form.name) }}
</div>
</div>
При наличии ошибки она хорошо отображается в виде веточки.
Но у меня есть поле ManyToMany:
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Address", cascade={"persist"})
*
* @Assert\Valid()
* @Assert\Count(
* min = 1,
* minMessage = "at.least.one.address.is.required",
* )
*/
private $addresses;
Итак, если для моей сущности не заданы адреса, должна появиться ошибка.
Но предыдущий код не работает.
Контроллер ловит ошибку, но она не отображается в ветке.
<div class="form-group form-group-sm{{ not form.addresses.vars.valid ? ' has-error' }}">
{{ form_label(form.addresses, 'addresses') }}
<div class="col-sm-9">
{# the following code is for adding elements with javascript via the prototype form #}
{% import 'common/form/macros/_address.html.twig' as address_form %}
<div data-component="address" data-value="{{ address_form.data(form.addresses.vars.prototype)|e }}">
{% for address in form.addresses %}
{{ address_form.data(address) }}
{% endfor %}
</div>
<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#modal-address">
<i class="fa fa-plus" aria-hidden="true"></i>
</button>
{# #}
{{ form_errors(form.addresses) }}
</div>
</div>
form.addresses.vars.valid всегда верно
и form_errors (form.addresses) пусто
Редактировать:
Ошибка, возникающая в контроллере, определяется в отношении M2M.
Я получаю это с помощью простой проверки формы:
if ($form->isSubmitted()) {
if ($form->isValid()) {
}
$this->addFlash('danger', $translator->trans('the.form.contains.errors'));
}
Отладчик показывает мне правильную сработавшую ошибку:
ConstraintViolation {#1409 ▼
-message: "Au moins une adresse est requise"
-messageTemplate: "at.least.one.address.is.required"
-parameters: [▼
"{{ count }}" => 0
"{{ limit }}" => 1
]
-plural: 1
-root: Form {#1196 ▶}
-propertyPath: "data.addresses"
-invalidValue: ArrayCollection {#870 …}
-constraint: Count {#729 …}
-code: "bef8e338-6ae5-4caf-b8e2-50e7b0579e69"
-cause: null
}
Редактировать2:
В отладчике на вкладке Форма простая ошибка поля связана с тем же полем (именем).
Но ошибка M2M, как ни странно, связана с сущностью (клубом), а не с полем адресов, как показано на рисунке: