为什么我的Symfony2表单数据被重新排列?

时间:2014-04-26 21:42:47

标签: php symfony

我有一个包含一系列entites的表单,呈现为复选框:

$form = $this->createForm(new BasicListType(), $lists);

class BasicListType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('lists', 'entity', [
            'required' => false,
            'class' => 'MyBundle:ListEntity',
            'property' => 'id',
            'property_path' => '[id]',
            'multiple' => true,
            'expanded' => true,
        ]);
    }

    public function getName()
    {
        return 'list';
    }
}

当我显示表单时,这些行与我使用它构建的$lists的顺序不同。

{{ form_start(form) }}

    {% for list in form.lists %}
        {{ form_row(list) }}
    {% endfor %}

{{ form_end(form) }}

事实上,他们按id属性进行了字母表分类。为什么会发生这种情况,更重要的是,有什么方法可以阻止它吗?

1 个答案:

答案 0 :(得分:0)

您可能需要使用query_builder选项构建自定义查询,并根据需要订购结果。看起来应该是这样的:

$builder->add('lists', 'entity', [
        'required' => false,
        'class' => 'MyBundle:ListEntity',
        'property' => 'id',
        'query_builder' => function(EntityRepository $er){
            $qb = $er->createQueryBuilder('l');
                $qb
                    ->select('l')
                    ->orderBy('DESIRED ORDER FIELD', 'ASC OR DESC') // change this!!
                ;
            return $qb;
        }
        'property_path' => '[id]',
        'multiple' => true,
        'expanded' => true,
    ]);

您也可以直接传递QueryBuilder对象。看看文档。