2016-03-02 2 views
0

У меня есть форма Symfony, сопоставленная с сущностью, но есть три необязательных значения. Каждое из этих значений имеет связанный с ним флажок, и эти флажки фактически не сопоставляются с сущностью.Symfony 2 Form: установить поле, которое требуется в зависимости от флажка не в объекте

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('checkbox1', 'checkbox', array(
      'mapped' => false, 
      'label_render' => false, 
      'required' => false, 
     )) 
     ->add('value1', 'text', array(
      'required' => false, 
     )) 
     ->add('checkbox2', 'checkbox', array(
      'mapped' => false, 
      'label_render' => false, 
      'required' => false, 
     )) 
     ->add('value2', 'text', array(
      'required' => false, 
     )) 
     ->add('checkbox3', 'checkbox', array(
      'mapped' => false, 
      'label_render' => false, 
      'required' => false, 
     )) 
     ->add('value3', 'text', array(
      'required' => false, 
     )) 
    ; 
} 

Я хочу, чтобы текстовые поля были необходимы, если установлен соответствующий флажок. Я знаю о проверках обратных вызовов внутри объекта, но здесь поля флажка фактически не отображаются, поэтому мне нужно что-то на уровне формы. Я видел что-то об обратных вызовах валидации групп внутри метода setDefaultOptions, но все примеры слишком тесно связаны с реальными объектами. Любая помощь?

ответ

1

Думаю, вам нужно использовать EventListener.

Следуйте за документом: http://symfony.com/doc/current/components/form/form_events.html.

Вы могли бы сделать что-то вроде:

->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) { 
    ->add('value1', 'text', array(
     'required' => true, 
    )) 
}) 

Когда флажок проверки. Вы должны сделать это с помощью метода Ajax post. Это довольно просто.

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