2014-12-30 16 views
9

Czy to możliwe, aby wyłączyć backend (server-side) zatwierdzenie dla określonego pola?Wyłącz walidacja backend dla pola wyboru w Symfony 2 Typ

Wnen Im próbuje wysłać formularz z dynamicznie obciążonych opcji dostaję błąd „ERROR:. Wartość ta nie jest ważna”

myślę symfony jest sprawdzenie, czy moja wartość jest domyślna ogłosił listę (w moim przypadku jego pustej listy), jeśli nie zwróci false.

+0

Dodaj trochę kodu, aby zilustrować swój problem. – Ziumin

+0

Tak, niektóre kod plz, błąd pochodzi od if ($ form-> isValid()) {? –

+1

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

Odpowiedz

20

Jest to mylące, ale takie zachowanie nie jest naprawdę walidacja podobne jak jest to spowodowane przez „ChoiceToValueTransformer”, które rzeczywiście wyszukuje dla wpisów na twojej wcześniej zadeklarowanej liście. Jeśli twoja lista jest pusta lub chcesz wyłączyć transformator, możesz go po prostu zresetować.

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

    //more fields... 

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

Następnie pojawi się niestandardowe zdefiniowane sprawdzanie poprawności (jeśli istnieje).

+0

Twoje rozwiązanie nie miało żadnego wpływu na mnie w Symfony 2.8. Ale to pomogło: http://stackoverflow.com/questions/12946461/validating-dynamically-loaded-choices-in-symfony-2 –

+0

Gdybym użyć opcji resetViewTransformers działa tylko wtedy, gdy forma jest przeładowane, ponieważ inna dziedzina dał błąd utraty wartości wyboru. Czy masz pomysł, jak to naprawić? – Tom

0

Dodaj wewnątrz buildForm metodę w klasie typu forma, dzięki czemu można sprawdzić poprawność wartości pola input raczej wyboru z wybranej wartości pola;

$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

Wywołanie 'remove()' nie jest konieczne. 'add()' zastępuje istniejące pole. – simohe

Powiązane problemy