2011-12-16 3 views
2

Symfony2プロジェクトのルーティングファイルにカスタムキーと値のペアを追加して、コントローラでそれを読み取ることはできますか?例えばルーティングファイルにカスタムキーを使用

AcmeDemoBundle_Default_hello: 
    pattern: /hello/{name} 
    defaults: { _controller: AcmeDemoBundle:Default:hello } 
    SomeCustomKey: CustomValue 

私は私のプロジェクトの一つに、いくつかの動的な振る舞いを追加するには、これらのキー/値のペアを使用します。たとえば、すべてのルートをカスタムのキー/値のペアで読み取って、それらをユーザーに表示して、動的メニューで使用することができます。

答えて

0

alessandro1997が正常に動作します@方法が提案されているが、私はこれを行うための別の方法(私が優れていると考えている)が見つかりました:あなたはルートのoptionsセクションにキー/値のペアを追加することができます

を。
コントローラーに渡されるパラメーターが乱雑にならないので、これは良い方法です(私が間違っていると正しいと思います)。

+0

私はその答えに同意します。しかし、パスのオプション(コントローラまたはビュー内の)にどのようにアクセスしたかの例を挙げてください。 – netmikey

1

あなたはdefaultsセクションにキー/値のペアを追加して、コントローラでそれを読むことができます:

AcmeDemoBundle_Default_hello: 
    pattern: /hello/{name} 
    defaults: { _controller: AcmeDemoBundle:Default:hello, key: value } 

とコントローラで:

echo $this->getRequest()->attributes->get('key'); 

をそれが動作するはずです。

6

オプションを使用する方がパラメータを追加するために追加されていないので、私はもっと良いアイデアを感じています。また、コントローラ内のこれらのオプションにアクセスすることもできます。 routing.ymlファイルで

:このような

demo_page: 
    path:/
    defaults: { _controller: DemoBundle:Default:index } 
    options: 
     key: value 

そして、あなたのコントローラであなたがアクセスできるオプション:

/** 
    * @var $router \Symfony\Bundle\FrameworkBundle\Routing\Router 
    */ 
    $router = $this->get('router'); 
    $routeCollection = $router->getRouteCollection(); 

    /** 
    * @var $route \Symfony\Component\Routing\Route 
    */ 
    $route = $routeCollection->get($this->getRequest()->get('_route')); 

    $allOptions = $route->getOptions(); 

    $specificOption = $route->getOption('key'); 
+0

この変数にtwigからアクセスすることは可能ですか? (コントローラから渡されることなく) – jion

関連する問題