【问题标题】:custom action in SonataAdminBundleSonataAdminBundle 中的自定义操作
【发布时间】:2012-05-31 04:52:33
【问题描述】:

在这个page 上,我找到了如何为我的自定义操作添加路线。

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'
                )
            )
        ))
    ;
}

它生成的网址是这样的:

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

我的链接模板:

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

我不知道如何解决这个问题:

  1. 如何为该路由通道定义自定义控制器? 现在我有一个错误:

    方法“Sonata\AdminBundle\Controller\CRUDController::ispremiumAction”不存在。

  2. 我可以用 generateUrl 方法更改生成的 url 吗?

【问题讨论】:

    标签: php symfony symfony-sonata sonata-admin


    【解决方案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]
    

    【讨论】:

    • 非常感谢!附言我是 symfony 2.0 的菜鸟,刚刚发现,我也可以在 $collection->add 方法中设置 _controller
    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 2015-09-03
    • 2012-02-02
    • 2012-06-11
    • 2017-11-09
    • 1970-01-01
    • 2013-04-25
    • 2015-05-04
    相关资源
    最近更新 更多