Почему я получаю symfony ошибку формы на несуществующем поле? - PullRequest
0 голосов
/ 15 января 2020

enter image description here

Как видно на скриншоте, возникает ошибка «Почтовый адрес не заполнен».

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;

Как это отладить? Я попытался пошагово подумать об этих файлах вендора, но они сделали кучу шагов, я получил ошибку проверки, но не заметил, где он на самом деле добавляет это точно.

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Во-первых, даже если поле обнуляется в объявлении ORM, вы должны установить его как ложное в форме (это не автоматическое c).

Во-вторых, вы уверены, что zipCode определен в UserFormType?

В-третьих, странно, что ваш почтовый адрес - UserFormType (возможно, ошибка namig).

0 голосов
/ 15 января 2020

Обнаружено, что вызывает:

В объекте $ ошибки причин мы видим ограничение. Пришлось посмотреть на это ограничение. Почему-то впервые, когда я проверил это ограничение - оно не вызвало нарушения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...