Intereting Posts
Как найти только «новые» сообщения при использовании функций IMAP PHP для почтового ящика POP3? Итерация php-массива и конкатенация заменить пространство путем использования htaccess Справка Regex: сопоставление любого файла изображения, начинающегося с подчеркивания jaxl не может подключиться к Prosody Не-браузерная эмуляция JavaScript – возможно ли это? Как проверить, что наша электронная почта была прочитана в веб-почте с использованием PHP отправить приложение из формы с phpmailer не работает Запрошены ли параметризованные запросы в PDO для переменных запроса? Как добавить пользовательский атрибут в zend framework 2 с помощью zend из Как преобразовать строку с числами и пробелами в int Каковы причины различных форм фигурных скобок? Как войти с помощью twitter с помощью PHP и AJAX Почему не заводской шаблон для сортировки Opencart 2.1.0.2 Ошибка при установке ocmod.zip

Добавить ошибку в элемент формы Symfony 2

Я проверяю некоторые проверки в моем контроллере. И я хочу добавить ошибку к конкретному элементу моей формы при ошибке. Моя форма:

use Symfony\Component\Form\FormError; // ... $config = new Config(); $form = $this->createFormBuilder($config) ->add('googleMapKey', 'text', array('label' => 'Google Map key')) ->add('locationRadius', 'text', array('label' => 'Location radius (km)')) ->getForm(); // ... $form->addError(new FormError('error message')); 

Метод addError () добавляет ошибку в форму, а не в элемент. Как добавить ошибку в элемент locationRadius?

Ты можешь сделать

 $form->get('locationRadius')->addError(new FormError('error message')); 

Элементы формы также FormInterface тип FormInterface .

Хорошо, ребята, у меня есть другой путь. Это сложнее и только для конкретных случаев.

Мое дело:

У меня есть форма и после отправки я отправляю данные на сервер API. И ошибки, которые я получил от сервера API.

Формат ошибки сервера API:

 array( 'message' => 'Invalid postal code', 'propertyPath' => 'businessAdress.postalCode', ) 

Моя цель – получить гибкое решение. Позволяет установить ошибку для соответствующего поля.

 $vm = new ViolationMapper(); // Format should be: children[businessAddress].children[postalCode] $error['propertyPath'] = 'children['. str_replace('.', '].children[', $error['propertyPath']) .']'; // Convert error to violation. $constraint = new ConstraintViolation( $error['message'], $error['message'], array(), '', $error['propertyPath'], null ); $vm->mapViolation($constraint, $form); 

Это оно!

ЗАМЕТКА! addError() обходит опцию error_mapping .


Моя форма (адресная форма, встроенная в форму Компании):

Компания

 <?php namespace Acme\DemoBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Validator\Constraints; class Company extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('companyName', 'text', array( 'label' => 'Company name', 'constraints' => array( new Constraints\NotBlank() ), ) ) ->add('businessAddress', new Address(), array( 'label' => 'Business address', ) ) ->add('update', 'submit', array( 'label' => 'Update', ) ) ; } public function getName() { return null; } } 

Адрес

 <?php namespace Acme\DemoBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Validator\Constraints; class Address extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder // ... ->add('postalCode', 'text', array( 'label' => 'Postal code', 'constraints' => array( new Constraints\NotBlank() ), ) ) ->add('town', 'text', array( 'label' => 'Town', 'constraints' => array( new Constraints\NotBlank() ), ) ) ->add('country', 'choice', array( 'label' => 'Country', 'choices' => $this->getCountries(), 'empty_value' => 'Select...', 'constraints' => array( new Constraints\NotBlank() ), ) ) ; } public function getName() { return null; } }