Disable backend validation for choice field in Symfony 2 Type
Asked Answered
M

3

16

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.

Mcdade answered 30/12, 2014 at 13:54 Comment(3)
Add some code to illustrate your problem.Primitivism
Yes some code plz, error is from if ($form->isValid()){ ?Antigen
Similar: #18207976Saloop
K
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).

Kesha answered 5/8, 2015 at 11:57 Comment(3)
Your solution had no effect for me in symfony 2.8. But this helped: #12946961Christianna
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?Maribelmaribelle
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.Apps
N
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]
            )
        }
    }
);
Needless answered 23/8, 2017 at 1:4 Comment(1)
The remove() call is not necessary. add() replaces an existing field.Allx

© 2022 - 2024 — McMap. All rights reserved.