Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何控制细枝中标记的复选框顺序_Php_Symfony_Checkbox_Twig - Fatal编程技术网

Php 如何控制细枝中标记的复选框顺序

Php 如何控制细枝中标记的复选框顺序,php,symfony,checkbox,twig,Php,Symfony,Checkbox,Twig,因此,当我用细枝列出一系列复选框时,我面临着这种奇怪的行为 看到新的页面,它正确地显示了所有内容,并说我正在保存这个实验室 好的,我保存了实验室,现在转到编辑页面 标记的复选框首先显示,破坏了新页面上的字母顺序 我需要编辑页面变得与新页面完全相同,但我不知道如何组织细枝上的这些复选框 渲染复选框的块: {% block _appbundle_laboratory_laboratoryExams_row %} <div class="form-group">

因此,当我用细枝列出一系列复选框时,我面临着这种奇怪的行为

看到新的页面,它正确地显示了所有内容,并说我正在保存这个实验室

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

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

我需要编辑页面变得与新页面完全相同,但我不知道如何组织细枝上的这些复选框

渲染复选框的块:

{% 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 %}
实验室检查

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

我会说这和小树枝无关

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

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


如果不是这样,或者您遇到了一些问题,请使用formtype代码和获取复选框数据的代码编辑您的问题。

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

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');
        },
    ]);
}

感谢您的回答,我通过使用表单中的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)));
$iterator=$form->get('LaboratoryTests')->getData()->getIterator();
$iterator->uasort(函数($a,$b){
返回($a->getExam()->getName()<$b->getExam()->getName())?-1:1;
});
$form->get('LaboratoryTests')->setData(新数组集合(迭代器数组($迭代器));

在我看来,默认情况下应该这样做,我相信没有人希望复选框以这种方式排列

这样做,但它给了我一系列的选择框,而不是复选框
$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)));