2015-08-04 1 views
0

В моем проекте Symfony я использую SonataAdminBundle. И у меня вопрос: Например, у меня есть объект с функцией:SonataAdminBundle, фильтрация по функции

class Entity { 
protected $id; 

public idBiggerThan($value) { 
    return $id > $value; 
} 

И я хочу, чтобы создать фильтр, который фильтрует список в результате этой функции (например, чтобы иметь возможность выбирать только объекты, которые имеют идентификатор больше текущего пользователя).

Я понимаю, что этот фильтр можно написать без использования этой функции, но у меня есть гораздо более сложные функции, для которых я не хочу писать запросы.

Благодарим за помощь.

UPD: Я пытался что-то вроде этого, но он не работает

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

       $queryBuilder 
        ->where($alias . '. idBiggerThan(:current_user)') 
        ->setParameter('current_user', $this->getCurrentUser()->getId()); 

      }, 
     'field_type' => 'checkbox' 
    )); 
+1

Вы можете создать свой собственный типы фильтров, которые когда-либо были вашими критериями, я создал один для моих собственных нужд, чтобы иметь фильтр диапазона номеров ['Sonata-admin-number-range-filter'] (https://github.com/dianuj89/Sonata-admin-number- диапазон-фильтр) –

ответ

0

Посмотрите на doctrine_orm_callback в документации: https://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/filter_field_definition.html

 

    $datagridMapper->add('title') 
       ->add('enabled') 
       ->add('tags', null, array(), null, array('expanded' => true, 'multiple' => true)) 
       ->add('author') 
       ->add('with_open_comments', 'doctrine_orm_callback', array(
    //    'callback' => array($this, 'getWithOpenCommentFilter'), 
        'callback' => function($queryBuilder, $alias, $field, $value) { 
         if (!$value['value']) { 
          return; 
         } 
         $queryBuilder->leftJoin(sprintf('%s.comments', $alias), 'c'); 
         $queryBuilder->andWhere('c.status = :status'); 
         $queryBuilder->setParameter('status', Comment::STATUS_MODERATE); 
         return true; 
        }, 
        'field_type' => 'checkbox' 
       )); 

 Смежные вопросы

  • Нет связанных вопросов^_^