【问题标题】:How to control marked checkbox order in twig如何控制树枝中标记的复选框顺序
【发布时间】:2016-01-25 21:51:04
【问题描述】:

所以我在用 twig 列出一系列复选框时遇到了这种奇怪的行为

看到新页面,它显示一切正常,并说我正在拯救这个实验室

img1

好的,我保存了实验室,现在进入编辑页面

img2

标记的复选框首先显示,破坏了新页面上的字母顺序。

我需要编辑页面与新页面完全一样,但我不知道如何在 twig 上组织这些复选框。

呈现复选框的块:

{% block _appbundle_laboratory_laboratoryExams_row %}
    <div class="form-group">
        {{ form_label(form) }}
        <div class="col-md-10 col-md-offset-2">
            <div class="app-checkbox-collection">
                <p>{{ 'laboratory.field_laboratory' | trans }}</p>
                {%  dump(form) %}
                {% for child in form %}
                    {% if child.exam.vars.data.type == constant('AppBundle\\Entity\\ExamLaboratory::TYPE')%}
                        {{ form_widget(child.permission, {
                            'attr' : {
                                'class' : 'exam-checkbox'
                            },
                            'label' : child.exam.vars.data.name
                        }) }}
                    {% endif %}
                {% endfor %}
                <p>{{ 'laboratory.field_image' | trans }}</p>
                {% for child in form %}
                    {% if child.exam.vars.data.type == constant('AppBundle\\Entity\\ExamImage::TYPE')%}
                        {{ form_widget(child.permission, {
                            'attr' : {
                                'class' : 'exam-checkbox'
                            },
                            'label' : child.exam.vars.data.name
                        }) }}
                    {% endif %}
                {% endfor %}
            </div>
        </div>
    </div>
{% endblock %}

我不会在葡萄牙语 stackoverflow 上提问,因为那里没有人回答 symfony 的问题,可能用户很少

编辑:

这是构建表单:

实验室

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', null, array(
                'label' => 'laboratory.name',
                'attr' => array('class' => 'focus')
            ))                
            ->add('leader', null, array(
                'label' => 'laboratory.leader'
            ))                
            ->add('city', null, array(
                'label' => 'laboratory.city',
                'placeholder' => 'action.select_one'
            ))
            ->add('laboratoryExams', 'collection', array(
                'label' => 'laboratory.laboratoryExams',
                'type' => new LaboratoryExamType(),
                'allow_delete' => true,
                'by_reference' => false,
            ))
        ;
    }

实验室考试

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('permission', null, array(
                'label' => 'laboratoryexam.permission',
            ))
            ->add('exam', null, array(
                'label' => 'laboratoryexam.exam',
            ))
        ;
    }

【问题讨论】:

    标签: php symfony checkbox twig


    【解决方案1】:

    我会说它与树枝无关。

    这将在构造带有复选框的表单的表单类型对象上设置。

    似乎数据是在表单创建时以编程方式填充的,并且已经选择的选项是第一个。

    如果不是这种情况或者您遇到了问题,请使用表单类型代码和获取复选框数据的代码编辑您的问题。

    【讨论】:

      【解决方案2】:

      您可以在构建表单时设置复选框的顺序:

      public function buildForm(FormBuilderInterface $builder, array $options)
      {
          $builder->add('permission', 'entity', [
             'class' => 'Acme\AppBundle\Entity\Parameter',
             'multiple' => true,
             'expanded' => true,
             'query_builder'=> function(EntityRepository $repository) {
                  return $repository->createQueryBuilder('exam')->orderBy('exam.title', 'ASC');
              },
          ]);
      }
      

      【讨论】:

      • 这样做了,但它给了我一系列选择框而不是复选框
      【解决方案3】:

      感谢您的回答,我通过在表单中​​使用 ArrayCollection 找到了解决方案。

      $iterator = $form->get('laboratoryExams')->getData()->getIterator();
      $iterator->uasort(function ($a, $b) {
          return ($a->getExam()->getName() < $b->getExam()->getName()) ? -1 : 1;
      });
      $form->get('laboratoryExams')->setData(new ArrayCollection(iterator_to_array($iterator)));
      

      IMO 默认情况下应该这样做,我相信没有人愿意让复选框那样混乱

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-10
        • 2015-04-22
        相关资源
        最近更新 更多