Как видно на скриншоте, возникает ошибка «Почтовый адрес не заполнен».
propertyPath заканчивается на .zipcode.
Как это возможно?
Слева мы видим элементы почтовых адресов, но ни один из них не является почтовым индексом.
$user = $this->getUser();
$formBuilder = $this->createFormBuilder($user)
->add('email', EmailType::class, array('required' => true))
->add(
'mailingAddress',
UserFormType::class,
array(
'check_modifiable' => true,
'data' => $user,
'form_parts' => 'mailing_address',
'label' => false,
'mapped' => false,
'show_password' => false
)
);
if ($this->isGranted('ROLE_CUSTOMER')) {
$formBuilder
->add(
'businessInformation',
BusinessInformationType::class,
array(
'check_modifiable' => true,
'data' => $user,
'label' => false,
'mapped' => false,
)
);
}
$form = $formBuilder->getForm();
$form->handleRequest($request);
В UserFormType есть этот код, который добавляет поля:
foreach ($this->userManager->getGroupPermissions($userGroup, $options['form_parts']) as $setting) {
/** @var UserGroupPermission $setting */
if (
$setting->getIsActive() &&
(
empty($options['show_only_parts']) ||
in_array($setting->getFieldName(), $options['show_only_parts'])
)
) {
$this->addFormFieldBySetting($builder, $options, $setting);
}
}
Я отлажен, он не добавляет поля zipCode.
В шаблоне:
{% block zip_code %}
<div class="col-md-5 col-lg-4">
{% if form.mailingAddress.zipCode is defined %}
{{ form_row(form.mailingAddress.zipCode,{
'attr': {
'data-mask': '99999',
'data-rule-zipcodeUS': 'true'
}
}) }}
{% endif %}
</div>
{% endblock %}
снова отлажен - form.mailingAddress.zipCode
не определен и поэтому поле не отображается.
Пользователь. php Сущность также не имеет требования минимальной длины:
/**
* @var string
*
* @ORM\Column(name="zip_code", type="string", length=16, nullable=true)
* @Assert\Length(max="16")
*/
protected $zipCode;
Как это отладить? Я попытался пошагово подумать об этих файлах вендора, но они сделали кучу шагов, я получил ошибку проверки, но не заметил, где он на самом деле добавляет это точно.