2012-12-21 61 views
4

我有一個在樹枝模板中驗證複選框的問題。在樹枝,我想這樣做:Symfony2驗證表單複選框在樹枝模板中被選中

{% for activity in form.activity %} 
    {% if (activity.isChecked) %} 
    <div> 
     {{ form_widget(activity) }} 
     {{ form_label(activity) }} 
    </div> 
    {% endif %} 
{% endfor %} 

活動是在表單生成一個實體領域:

->add('activity', 'entity', array(
      'class'   => 'AcmeProspectionBundle:Activity',   
      'expanded'  => true, 
      'multiple'  => true, 
      'property'  => 'name', 
/* 
      'query_builder' => function(EntityRepository $er) use($options) { 
       return $er->createQueryBuilder('ac') 
       ->leftJoin('ac.company','c') 
       ->where('c = :id') 
       ->orderBy('ac.name', 'ASC') 
       ->setParameter('id', $options['company_id']); 
      } 
*/ 
)) 

事實上,如果我不發表意見query_builder組成部分,它不僅會生成選中的部分,但是如果我這樣做,Symfony將檢查原始數組和提交數組的完整性。我無法添加任何新活動。其實我產生由JavaScript的選擇是這樣的:

<div class="activity_checkbox" data-prototype='<div> 
<input type="checkbox" checked="checked" value="100" placeholder="" name="acme_prospection_company[activity][]"> 
<label></label></div>'> 

因爲我有3000多的選擇,我不能用原來的複選框或選擇讓用戶做到這一點。所以現在所有的工作都完成了,只需要渲染選中的活動。我不知道如何。

回答

-1

到表單對象(S),一般的解決辦法是內訪問值:

{{ form.vars.value.NAME }} 

使用dump方法,你可以輸出所有可用表單對象:

{{ dump(form.vars.value) }} 

它也記錄在該書:http://symfony.com/doc/current/book/forms.html

+0

對於複選框,這不起作用。 –

5

對於複選框,您應該使用:

{% if form.activity.vars.data %} 
+0

您可以在上面的循環中使用'{{activity.vars.data}}'(不需要'form'部分) – craigh

相關問題