2014-12-30 11 views
9

È possibile disabilitare la convalida del backend (lato server) per il campo specificato?Disabilita la convalida del backend per il campo di scelta in Symfony 2 Tipo

Wnen Sto cercando di inviare un modulo con opzioni caricate dinamicamente ottengo errore "ERRORE: questo valore non è valido."

Penso che symfony stia controllando se il mio valore è nella lista dichiarata predefinita (nel mio caso la sua lista vuota), se non restituisce false.

+0

Aggiungere un codice per illustrare il problema. – Ziumin

+0

Sì un po 'di codice plz, errore è da if ($ form-> isValid()) {? –

+1

Simili: http://stackoverflow.com/questions/18207476/symfony2-dynamic-form-choices-validation-remove – shirshir

risposta

20

E 'confuso, ma questo comportamento non è davvero la convalida correlata in quanto è causata dalla "ChoiceToValueTransformer" che cerca davvero per le iscrizioni nella tua lista pre-dichiarata. Se la tua lista è vuota o vuoi disabilitare il trasformatore, puoi semplicemente resettarla.

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

    //more fields... 

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

Quindi verrà eseguita la convalida definita dall'utente (se esistente).

+0

La tua soluzione non ha avuto alcun effetto per me in symfony 2.8. Ma questo ha aiutato: http://stackoverflow.com/questions/12946461/validating-dynamically-loaded-choices-in-symfony-2 –

+0

Se uso l'opzione resetViewTransformers funziona, solo quando il modulo viene ricaricato perché un altro campo ha dato un errore il valore di scelta è perso. Hai un'idea su come risolvere questo problema? – Tom

0

Aggiungere questo metodo interno buildForm nella classe del tipo di modulo in modo da poter convalidare un valore di campo di input piuttosto una scelta da un valore di campo selezionato;

$builder->addEventListener(
    FormEvents::PRE_SUBMIT, 

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

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

La chiamata 'remove()' non è necessaria. 'add()' sostituisce un campo esistente. – simohe

Problemi correlati