Symfony2验证在twig模板中选中的表单复选框

时间:2012-12-21 10:32:00

标签: symfony

我在验证树枝模板中的复选框时遇到问题。在树枝上,我想这样做:

{% 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种选择,我无法使用原始复选框或选择让用户这样做。所以现在所有的工作都完成了,只需要渲染已检查的活动。我不知道怎么做。

3 个答案:

答案 0 :(得分:5)

对于复选框,您应该使用:

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

答案 1 :(得分:0)

要访问表单对象中的值,通用解决方案是:

{{ form.vars.value.NAME }}

使用dump方法可以输出所有可用的表单对象:

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

书中还记录了这些内容:http://symfony.com/doc/current/book/forms.html

答案 2 :(得分:0)

这是一个很晚的响应,但是其他人可能有这个问题,这是我看到的唯一与集合中表单中的布尔数据相关的条目。这在Symfony 4中为我工作,使用了一个名为“ organization”的布尔值属性“ isRole”,该属性是集合的元素。使用的表单类型是CollectionType(不是EntityType)。但是,我认为这在两种情况下都应该起作用:

{% for organization in form.organizations %}
   {% if (organization.isRole.vars.data) %}
       ...
   {% endif %}
{% endfor %}

无需使用==,因为数据结果已经是布尔结果。