2012-05-24 26 views
8

在此page我發現瞭如何爲我的自定義操作添加路由。SonataAdminBundle中的自定義操作

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> 

我不知道如何解決這個問題ems:

  1. 如何爲該路徑傳遞定義自定義控制器? 現在我有一個錯誤:

    方法「Sonata \ AdminBundle \ Controller \ CRUDController :: ispremiumAction」不存在。

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

回答

30

當您爲EntityAdmin類創建服務時,第三個參數是控制器名稱。您可以創建一個延伸CRUDController並將其設置爲服務的類。 e.g

控制器,

//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] 
+3

感謝的很多!附:我很喜歡symfony 2.0,剛剛發現,我也可以在$ collection-> add方法中設置_controller –