2016-10-11 7 views
3

Используя SonataAdminBundle с Symfony2, я ищу решение для доступа к некоторым классам Admin с определенным маршрутом.Sonata Admin Class: добавьте ссылки KnpMenu, указывающие класс администратора с настраиваемым маршрутом

Например, у меня есть класс ContractAdmin с булевыми полями, такими как «Включено». То, что я хотел бы, чтобы добавить в левой KnpMenu сонаты администратора, некоторые ссылки, указывающие на тот же администратор класса, но с индивидуальным маршрутом (кроме «список» маршрут по умолчанию), например:

  • контрактов
    • всех контракты
    • контрактов позволили (листинг только включен контракту)
    • контрактов еще не включена (листинг только не включен контракту)

Это позволит избежать использования фильтров.

Итак, как я могу создать и поместить эти ссылки в меню, которые нацелены на соответствующий контроллер класса администратора с помощью настраиваемого маршрута?

Спасибо;)

+0

Я нашел способ связать пользовательский контроллер CRUD с пользовательским маршрутом в меню. Объявление маршрута в методе configureRoutes в классе admin, а затем добавление соответствующего действия в соответствующий CRUD-контроллер. В этом действии я использую тот же код, что и в «listAction». Итак, теперь возникает вопрос: как изменить запрос, используемый для создания списка из этого действия контроллера? – icedocemile

ответ

1

Я решил декларирование пользовательского CRUDController для этого администратора класса и добавление необходимости вызова метода listAction действия:

class ContractAdminController extends Controller { 

public function contractsEnabledAction() { 
    return $this->listAction(); 
} 

Я объявил этот обычай маршрут в класс администратора:

protected function configureRoutes(RouteCollection $collection) { 
    parent::configureRoutes($collection); 
    $collection->add('contracts_enabled', 'contractsEnabled/'); 
} 

Затем, перекрывая метод CreateQuery в классе администратора, я использую запрос «_route» атрибут так:

public function createQuery($context = 'list') { 
    $query = parent::createQuery($context); 

    switch ($this->getRequest()->get("_route")) { 
     case "admin_acme_contract_contracts_enabled" : 
      $query->andWhere(
        $query->expr()->eq($query->getRootAliases()[0] . '.enabled', ':param') 
      ); 
      $query->setParameter('param', true); 
      break; 
    } 
    return $query; 
}