2014-12-30 4 views
9

Ist es möglich, die Backend-Validierung (serverseitig) für das angegebene Feld zu deaktivieren?Deaktivieren der Backend-Validierung für das Auswahlfeld in Symfony 2 Typ

Wenn ich versuche, Formular mit dynamisch geladenen Optionen zu senden, erhalte ich den Fehler "FEHLER: Dieser Wert ist nicht gültig."

Ich denke Symfony überprüft, ob mein Wert auf der Standard-Liste (in meinem Fall die leere Liste) ist, wenn nicht false zurückgibt.

+0

Fügen Sie Code zur Veranschaulichung Ihres Problems hinzu. – Ziumin

+0

Ja einige Code plz, Fehler ist von wenn ($ form-> isValid()) {? –

+1

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

Antwort

20

Es ist verwirrend, aber dieses Verhalten ist nicht wirklich Validierung, wie es im Zusammenhang wird durch die „ChoiceToValueTransformer“ verursacht, die für die Einträge sucht in der Tat in Ihrer vordefinierten Liste. Wenn Ihre Liste leer ist oder Sie den Transformator deaktivieren möchten, können Sie ihn einfach zurücksetzen.

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

    //more fields... 

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

Dann wird Ihre benutzerdefinierte definierte Validierung einspringen (falls vorhanden).

+0

Ihre Lösung hatte keine Auswirkungen für mich in Symfony 2.8. Aber das half: http://stackoverflow.com/questions/12946461/validating-dynamically-loaded-choices-in-symfony-2 –

+0

Wenn ich die resetViewTransformers Option verwendet, funktioniert es nur, wenn das Formular neu geladen wird, weil ein anderes Feld gab ein Fehler der Auswahlwert ist verloren. Hast du eine Idee, wie das zu beheben ist? – Tom

0

Fügen Sie diese Methode innerhalb der buildForm Methode in Ihre Formulartypenklasse ein, damit Sie einen Eingabefeldwert validieren können, anstatt eine Auswahl aus einem ausgewählten Feldwert;

$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

Der Aufruf 'remove()' ist nicht notwendig. 'add()' ersetzt ein bestehendes Feld. – simohe

Verwandte Themen