Событие формы Symfony добавляет ошибку в определенное поле ⇐ Php
-
Гость
Событие формы Symfony добавляет ошибку в определенное поле
Мой сценарий следующий:
Если пользователь выбирает true из «maxRedemptionForDiscount» и вводит «0» в «maxRedemptionForDiscountValue», должно появиться сообщение об ошибке при отображении в конкретном поле (в позиции поля TextType)
Это форма с прослушивателем событий:
публичная функция buildForm(FormBuilderInterface $builder, массив $options) { $builder->добавить( 'maxRedemptionForDiscount', Тип выбора::класс, [ 'заполнитель' => ложь, 'несколько' => ложь, 'выбор' => [ true => 'discount.form_fields.set_max_redemptions', false => 'скидка.form_fields.unlimited', ], 'label' => 'discount.form_fields.max_redemption_for_discount', 'translation_domain' => 'сущности', 'обязательно' => ложь, 'error_bubbling' => правда, 'аттр' => [ 'class' => 'maxRedemptionForDiscountSelect', ], ] )->добавить( 'maxRedemptionForDiscountValue', ТипТекста::класс, [ 'label' => 'discount.form_fields.set_max_redemptions', 'translation_domain' => 'сущности', 'обязательно' => ложь, ] )->addEventListener( FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit'] ); } а это функция onPreSubmit:
/** * @param FormEvent $event */ публичная функция onPreSubmit(FormEvent $event) { $data = $event->getData(); $form = $event->getForm(); if ($data['maxRedemptionForDiscount'] == 1) { if ($data['maxRedemptionForDiscountValue'] == 0) { $form->addError(new FormError('сообщение об ошибке')); } } $event->setData($data); } Вот код ветки:
{{ form_row(form.maxRedemptionForDiscount) }} {{ form_row(form.maxRedemptionForDiscountValue) }} При этом над формой отображается сообщение об ошибке. Но я хочу, чтобы сообщение об ошибке отображалось в конкретном поле.
Это не работает:
$form->get('maxRedemptionForDiscountValue')->addError(new FormError('сообщение об ошибке')); Если я попробую это сделать, сообщение об ошибке исчезнет в верхней части формы, но не появится в определенной позиции поля.
Что я здесь делаю не так?
Мой сценарий следующий:
Если пользователь выбирает true из «maxRedemptionForDiscount» и вводит «0» в «maxRedemptionForDiscountValue», должно появиться сообщение об ошибке при отображении в конкретном поле (в позиции поля TextType)
Это форма с прослушивателем событий:
публичная функция buildForm(FormBuilderInterface $builder, массив $options) { $builder->добавить( 'maxRedemptionForDiscount', Тип выбора::класс, [ 'заполнитель' => ложь, 'несколько' => ложь, 'выбор' => [ true => 'discount.form_fields.set_max_redemptions', false => 'скидка.form_fields.unlimited', ], 'label' => 'discount.form_fields.max_redemption_for_discount', 'translation_domain' => 'сущности', 'обязательно' => ложь, 'error_bubbling' => правда, 'аттр' => [ 'class' => 'maxRedemptionForDiscountSelect', ], ] )->добавить( 'maxRedemptionForDiscountValue', ТипТекста::класс, [ 'label' => 'discount.form_fields.set_max_redemptions', 'translation_domain' => 'сущности', 'обязательно' => ложь, ] )->addEventListener( FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit'] ); } а это функция onPreSubmit:
/** * @param FormEvent $event */ публичная функция onPreSubmit(FormEvent $event) { $data = $event->getData(); $form = $event->getForm(); if ($data['maxRedemptionForDiscount'] == 1) { if ($data['maxRedemptionForDiscountValue'] == 0) { $form->addError(new FormError('сообщение об ошибке')); } } $event->setData($data); } Вот код ветки:
{{ form_row(form.maxRedemptionForDiscount) }} {{ form_row(form.maxRedemptionForDiscountValue) }} При этом над формой отображается сообщение об ошибке. Но я хочу, чтобы сообщение об ошибке отображалось в конкретном поле.
Это не работает:
$form->get('maxRedemptionForDiscountValue')->addError(new FormError('сообщение об ошибке')); Если я попробую это сделать, сообщение об ошибке исчезнет в верхней части формы, но не появится в определенной позиции поля.
Что я здесь делаю не так?
Мобильная версия