-->

在SonataAdminBundle自定义操作(custom action in SonataAdm

2019-06-24 18:05发布

在这个页面 ,我发现如何添加路线我的自定义操作。

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

从那以后,我添加自定义动作在我的管理类:

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 \控制器\ CRUDController :: ispremiumAction” 不存在。

  2. 我可以改变生成的URL与generateUrl方法?

Answer 1:

当你正在创建服务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]


文章来源: custom action in SonataAdminBundle