2014-10-08 144 views
3

我正在使用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` 

我该怎么做?

回答

12

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

看文档: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')); 
      } 
)) 
+0

由于一千倍! – 2015-05-21 11:11:21

相关问题