4

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

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

4

3 回答 3

5

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

{% if form.activity.vars.data %}
于 2014-12-14T13:02:21.477 回答
0

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

{{ form.vars.value.NAME }}

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

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

它也记录在书中:http ://symfony.com/doc/current/book/forms.html

于 2013-03-27T21:51:42.433 回答
0

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

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

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

于 2019-08-11T02:14:17.027 回答