我正在使用SonataAdminBundle,我对MyEntityAdmin类中的过滤器有疑问。
我有第一个函数protected function configureFormFields(FormMapper $formMapper)
,用于列出要在创建/编辑表单上显示的所有字段。
如果我有一个字段类型实体,我可以这样做:
->add('commercial', 'entity', array(
'class' => 'MyBundle:User',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')
->groupBy('u.id')
->orderBy('u.id', 'ASC')
->setParameters(array(1 => 'Commercial'));
},)
)
但我有另一个函数protected function configureDatagridFilters(DatagridMapper $datagridMapper)
,要求字段显示在过滤器表单上,我也做同样的事情,一个实体字段类型的自定义查询,但如果我这样做,我有错误:
No attached service to type named `entity`
我该怎么做?
答案 0 :(得分:16)
过滤器配置与奏鸣曲管理包中的表单配置完全不同。
查看文档:{{3}}
当您通过configuratDataFilters
添加新过滤器时,它会收到参数:字段名称,过滤器类型,过滤器配置,表单字段类型和表单字段配置。
因此,如果您只想覆盖实体选择类型的query_buider
,您应该尝试这样调用:
->add('commercial', null, array(), 'entity', array(
'class' => 'MyBundle:User',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')
->groupBy('u.id')
->orderBy('u.id', 'ASC')
->setParameters(array(1 => 'Commercial'));
}
))