2016-10-11 7 views
3

Symfony2でSonataAdminBundleを使用すると、特定のルートでいくつかのAdminクラスにアクセスするソリューションを探しています。Sonata Admin Class:KnpMenuを追加してカスタムルートを持つAdminクラスを指すリンクを追加

たとえば、「Enabled」などのブール値フィールドを持つContractAdminクラスがあります。私が望む何 はソナタ管理者の左KnpMenuに追加することで、例えば同じ管理クラスになく、(デフォルトの「リスト」ルート以外の)カスタムルートを指しているいくつかのリンク:

  • 契約
    • すべての契約
    • (唯一の有効な契約リスト)有効契約(契約のみを有効にしていないリスト)はまだ有効になっていない
    • 契約

これでフィルタを使用することができなくなります。

したがって、これらのリンクを作成し、対応する管理クラスコントローラをターゲットとするメニューにカスタムルートを設定するにはどうすればよいですか。私はにこのカスタムルートを宣言した

class ContractAdminController extends Controller { 

public function contractsEnabledAction() { 
    return $this->listAction(); 
} 

+0

カスタムCRUDコントローラをメニューのカスタムルートにリンクする方法が見つかりました。 configureRoutesメソッドのルートをadminクラスに宣言し、対応するアクションを対応するCRUDコントローラに追加します。 このアクションでは、 "listAction"と同じコードを使用しています。 これで問題は次のようになります。そのコントローラアクションからリストビューを生成するために使用されたクエリを変更する方法は? – icedocemile

答えて

1

私はそれがこの管理クラス用のカスタムCRUDControllerを宣言し、listActionメソッドの呼び出しに必要なアクションを追加することに解決しました);

ありがとうございました管理者クラス:

その後
protected function configureRoutes(RouteCollection $collection) { 
    parent::configureRoutes($collection); 
    $collection->add('contracts_enabled', 'contractsEnabled/'); 
} 

、管理クラスでからCreateQueryメソッドをオーバーライド、私はそのような要求「_route」属性を使用しています:

public function createQuery($context = 'list') { 
    $query = parent::createQuery($context); 

    switch ($this->getRequest()->get("_route")) { 
     case "admin_acme_contract_contracts_enabled" : 
      $query->andWhere(
        $query->expr()->eq($query->getRootAliases()[0] . '.enabled', ':param') 
      ); 
      $query->setParameter('param', true); 
      break; 
    } 
    return $query; 
} 
関連する問題