Add error to Symfony 2 form element Add error to Symfony 2 form element php php

Add error to Symfony 2 form element


You can do

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

As form elements are also of FormInterface type.


OK guys, I have another way. It is more complex and only for specific cases.

My case:

I have a form and after submit I post data to the API server. And errors I got from the API server as well.

API server error format is:

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

My goal is to get flexible solution. Lets set the error for the corresponding field.

$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);

That's it!

NOTE! addError() method bypasses error_mapping option.


My form (Address form embedded in the Company form):

Company

<?phpnamespace 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;    }}

Address

<?phpnamespace 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;    }}