【问题标题】:Symfony2 verify a form checkbox is checked in twig templateSymfony2 验证在树枝模板中选中了一个表单复选框
【发布时间】:2012-12-21 10:31:59
【问题描述】:

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

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

【问题讨论】:

    标签: symfony


    【解决方案1】:

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

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

    【讨论】:

    • 您可以在上面的循环中使用{{ activity.vars.data }} ^(不需要form 部分)
    【解决方案2】:

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

    {{ form.vars.value.NAME }}
    

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

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

    书中也有记载:http://symfony.com/doc/current/book/forms.html

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-27
        • 2016-04-05
        • 1970-01-01
        • 2012-10-28
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多