8

このページで、カスタムアクションのルートを追加する方法を見つけました。

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. そのルートパスのカスタムコントローラーを定義するにはどうすればよいですか?今私はエラーがあります:

    メソッド「Sonata\AdminBundle \ Controller \ CRUDController::ispremiumAction」は存在しません。

  2. generateUrlメソッドで生成されたURLを変更できますか?

4

1 に答える 1

30

クラスのサービスを作成する場合EntityAdmin、3番目の引数はコントローラー名です。拡張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]
于 2012-05-24T17:48:38.330 に答える