2016-02-16 46 views
0

有没有办法为SonataAdminBundle创建自定义过滤器类型,该类型扩展了另一种类型,例如类型doctrine_orm_callback?这个想法是重复使用其他过滤器中的自定义类型SonataAdminBundle:创建自定义过滤器类型

public function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 

    $datagridMapper 
     ->add('field', 'doctrine_orm_callback', array(
      'callback' => function($queryBuilder, $alias, $field, $value) { 
       if (!$value['value']) { 
        return; 
       } 

       $queryBuilder->leftJoin(sprintf('%s.field', $alias), 'field') 
        ->andWhere("field LIKE :field") 
        ->setParameter('field', "%{$value['value']}%"); 

       return true; 
      }, 
      'field_type' => 'search'), null, array('pattern' => '^[A-Za-z0-9]{1,12}$')); 
} 

谢谢!

+0

在AdminService和功能invoque定义功能:P – Cuchu

+0

我创建了一个自定义过滤器[*'索纳塔管理员用户号码范围,filter' *](HTTPS: //github.com/dianuj89/Sonata-admin-number-range-filter)前一段时间希望这会给你一个想法继续为你的解决方案 –

回答

0

检查这个link和尝试:

->add('with_open_comments', 
     'doctrine_orm_callback', 
     array('callback' => array($this, 'yourFunction'), 
      'field_type' => 'search'), 
     null, 
     array('pattern' => '^[A-Za-z0-9]{1,12}$')); 

    public function yourFunction($queryBuilder, $alias, $field, $value) 
    { 
     if (!$value['value']) { 
      return; 
     } 

     $queryBuilder->leftJoin(sprintf('%s.field', $alias), 'field') 
        ->andWhere("field LIKE :field") 
        ->setParameter('field', "%{$value['value']}%"); 

     return true; 
    } 
} 
+0

Again ..在AdminService中定义函数和函数invoque:p – Cuchu