На этой странице я нашел, как добавить маршрут для моего пользовательского действия.
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>
Я не знаю, как решить эти проблемы:
Как определить пользовательский контроллер для этого маршрута? Теперь у меня есть ошибка:
Метод «Соната \ AdminBundle \ Controller \ CRUDController :: ispremiumAction» не существует.
Могу ли я изменить сгенерированный URL-адрес с помощью метода generateUrl?
Когда вы создаете сервис для класса 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]