Sonata管理员,过滤器中的自定义查询

Clé*_*aud 7 symfony sonata-admin

我正在使用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'));
              },)
            )
Run Code Online (Sandbox Code Playgroud)

但是我有另一个函数protected function configureDatagridFilters(DatagridMapper $datagridMapper)可以在过滤器表单上显示Fields,而且我对同一件事做了一个实体字段类型的自定义查询,但是如果我这样做,我有错误:

No attached service to type named `entity`  
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点 ?

小智 16

过滤器配置与奏鸣曲管理包中的表单配置完全不同.

查看文档:http://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/filter_field_definition.html

通过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'));
           }
))
Run Code Online (Sandbox Code Playgroud)