我有一个包含一系列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
属性进行了字母表分类。为什么会发生这种情况,更重要的是,有什么方法可以阻止它吗?
答案 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对象。看看文档。