2016-03-02 81 views
0

我有一個Symfony表單映射到一個實體,但有三個可選值。每個值都有一個與之關聯的複選框,而這些複選框實際上並未映射到實體。Symfony 2表單:根據複選框設置字段不是實體

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方法執行此操作。這很簡單。

相關問題