我在验证树枝模板中的复选框时遇到问题。在树枝上,我想这样做:
{% 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种选择,我无法使用原始复选框或选择让用户这样做。所以现在所有的工作都完成了,只需要渲染已检查的活动。我不知道怎么做。
答案 0 :(得分:5)
对于复选框,您应该使用:
{% if form.activity.vars.data %}
答案 1 :(得分:0)
要访问表单对象中的值,通用解决方案是:
{{ form.vars.value.NAME }}
使用dump方法可以输出所有可用的表单对象:
{{ dump(form.vars.value) }}
答案 2 :(得分:0)
这是一个很晚的响应,但是其他人可能有这个问题,这是我看到的唯一与集合中表单中的布尔数据相关的条目。这在Symfony 4中为我工作,使用了一个名为“ organization”的布尔值属性“ isRole”,该属性是集合的元素。使用的表单类型是CollectionType(不是EntityType)。但是,我认为这在两种情况下都应该起作用:
{% for organization in form.organizations %}
{% if (organization.isRole.vars.data) %}
...
{% endif %}
{% endfor %}
无需使用==,因为数据结果已经是布尔结果。