2014-12-30 2 views
9

Можно ли отключить проверку на сервере (серверной стороне) для указанного поля?Отключить проверку подлинности для поля выбора в Symfony 2 Тип

Wnen Im пытается отправить форму с динамически загруженными параметрами. Я получаю сообщение об ошибке «ERROR: это значение недействительно».

Я думаю, что symfony проверяет, включено ли мое значение в объявленный по умолчанию список (в моем случае его пустой список), если не возвращает false.

+0

Добавить код для иллюстрации проблемы. – Ziumin

+0

Да какой-то код plz, ошибка от if ($ form-> isValid()) {? –

+1

Похожее: http://stackoverflow.com/questions/18207476/symfony2-dynamic-form-choices-validation-remove – shirshir

ответ

20

Это сбивает с толку, но такое поведение действительно не валидация связаны, как это вызвано «ChoiceToValueTransformer», который действительно ищет записи в вашем предварительно объявленном списке. Если ваш список пуст или вы хотите отключить трансформатор, вы можете просто сбросить его.

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

    //more fields... 

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

Тогда ваша пользовательская проверка будет проходить (если она существует).

+0

Ваше решение не повлияло на меня в symfony 2.8. Но это помогло: http://stackoverflow.com/questions/12946461/validating-dynamically-loaded-choices-in-symfony-2 –

+0

Если я использую параметр resetViewTransformers, он работает, только когда форма перезагружается, потому что другое поле дало ошибка будет потеряна. У вас есть идеал, как это исправить? – Tom

0

Добавьте это внутри метода buildForm в свой класс типа формы, чтобы вы могли проверить значение поля ввода, а не выбор из значения поля выбора;

$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

Вызов 'remove()' не требуется. 'add()' заменяет существующее поле. – simohe

Смежные вопросы