17

Is it possible to disable backend (server-side) validation for the specified field?

Wnen Im trying to send form with dynamicly loaded options I get error "ERROR: This value is not valid."

I think symfony is checking if my value is on the default declared list (in my case its empty list), if not returns false.

3
  • Add some code to illustrate your problem. Commented Dec 30, 2014 at 13:58
  • Yes some code plz, error is from if ($form->isValid()){ ? Commented Dec 30, 2014 at 13:58
  • 1
    Similar: stackoverflow.com/questions/18207476/… Commented Dec 30, 2014 at 15:51

3 Answers 3

42

It's confusing but this behaviour is not really validation related as it is caused by the "ChoiceToValueTransformer" which indeed searches for entries in your pre-declared list. If your list is empty or you want to disable the transformer you can simply reset it.

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('yourField', 'choice', array('required'=>false));

    //more fields...

    $builder->get('yourField')->resetViewTransformers();
}

Then your custom defined validation will step in (if it exists).

Sign up to request clarification or add additional context in comments.

3 Comments

Your solution had no effect for me in symfony 2.8. But this helped: stackoverflow.com/questions/12946461/…
If I use the resetViewTransformers option it works, only when the form is reloaded because an other field gave an error the choice value is lost. Do you have an idee how to fix this?
This saved me so badly in symfony 4.2 after couple of hours of search. Works perfectly. In my case I render fields in twig in the form type template, which is not equal to what i pass in. I could not force isValid(), and kept getting invalid value.
2

I found the solution

Symfony2.4 form 'This form should not contain extra fields' error

For more details: http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-dynamic-form-modification-suppressing-form-validation

Comments

1

Add this inside buildForm method in your form type class so that you can validate an input field value rather a choice from a select field value;

$builder->addEventListener(
    FormEvents::PRE_SUBMIT,

    function (FormEvent $event) {
        $form = $event->getForm();

        if ($form->has('field')) {
            $form->remove('field');
            $form->add(
                'field', 
                'text', 
                ['required' => false]
            )
        }
    }
);

1 Comment

The remove() call is not necessary. add() replaces an existing field.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.