пользовательское действие в SonataAdminBundle

На этой странице я нашел, как добавить маршрут для моего пользовательского действия.

protected function configureRoutes(RouteCollection $collection) { $collection->add('ispremium', $this->getRouterIdParameter().'/ispremium'); } 

После этого я добавляю пользовательские действия в свой класс Admin:

 protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('id') ->add('code', null, array('label' => 'Code')) ->add('_action', 'actions', array( 'actions' => array( 'ispremium' => array( 'template' => 'AppMyBundleBundle:Admin:ispremium.html.twig' ) ) )) ; } 

Он генерировал URL-адрес следующим образом:

 /app_dev.php/admin/mobispot/discodes/discode/300876/ispremium 

Мой шаблон для этой ссылки:

 <a href="{{ admin.generateObjectUrl('ispremium', object) }}">Link</a> 

Я не знаю, как решить эти проблемы:

  1. Как определить пользовательский контроллер для этого маршрута? Теперь у меня есть ошибка:

    Метод «Соната \ AdminBundle \ Controller \ CRUDController :: ispremiumAction» не существует.

  2. Могу ли я изменить сгенерированный URL-адрес с помощью метода generateUrl?

Related of "пользовательское действие в SonataAdminBundle"

Когда вы создаете сервис для класса EntityAdmin третьим аргументом является имя контроллера. Вы можете создать класс, который расширяет CRUDController и устанавливает его в службу. например

Контроллер,

 //Vendor\YourBundle\Controller\EntityAdminController.php class EntityAdminController extends CRUDController { public function ispremiumAction() { //process } } 

В services.yml ,

 entity.admin.service: class: FQCN\Of\EntityAdmin tags: - { name: sonata.admin, manager_type: orm, group: your_group, label: Label } arguments: [null, FQCN\Of\Entity, VendorYourBundle:EntityAdmin]