6

Symfony2 アプリは通常、バンドルを中心に編成されています。各バンドルには (多数の) コントローラーが含まれています。各コントローラーは、ルートでマップする必要があります。

実際には、ルートは通常config、バンドルのフォルダーの下の特定のファイルに保存されるか、最終的には各コントローラー内に注釈が付けられます。

私が探しているのは、現在のルートが特定の Symfony bundle に属しているかどうかを Twig で識別する方法です。出来ますか?

最後に、私の意見では、ルート名はコントローラーの名前空間に従う必要があることを考慮してqwer_XXくださいACME_HomeBundle_homeしたがって、私が求めていることを行うために、名前空間とルート名の関連付けに頼ることはできません。

4

1 に答える 1

7

Requestオブジェクトを見て、考えられる解決策を見つけました。

コントローラはRequestオブジェクトに接続されているため、Twigで文字列から抽出できます。

app.request.attributes.get('_controller')

したがって、バンドル名を取得します。たとえば、TwigExtensionを介して、このようなフィルター関数を定義できます。

public function getFilters() {
    return array(
        ...//other filters
        'bundleName'=>new \Twig_Filter_Method($this, 'bundleNameFilter'),
    );
}

public static function bundleNameFilter($string){
  return strstr(substr(strstr($string, '\\'), 1), '\\', true);
} 

次に、小枝で次のように使用します。

{{  app.request.attributes.get('_controller') | bundleName }}

それが役に立てば幸い。

于 2013-02-01T11:09:30.030 に答える