2011-12-16 27 views
2

有沒有辦法在Symfony2項目的路由文件中添加自定義鍵/值對,然後在控制器中讀取它?在路由文件中使用自定義鍵

例如:

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

我想用這些鍵/值對一些動態行爲添加到我的項目之一。例如,我可以使用自定義鍵/值對讀取所有路線,並將其顯示給用戶,以便在動態菜單中使用。

回答

0

雖然方法提出@ alessandro1997正常工作,我發現另一種方式來做到這一點(我認爲這是更好):

您可以添加鍵/值對路由的options部分。
它更好,因爲它不會混淆傳遞給控制器​​的參數(我認爲是這樣,如果我錯了,請糾正我)。

+0

我同意這個答案。但是,請您舉例說明您如何訪問路徑的選項(在您的控制器或視圖中)? – netmikey 2012-12-18 14:26:15

1

您可以在鍵/值對添加到defaults部分,然後在控制器中讀取數據:

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

和Controller:

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

是否可以從樹枝訪問這個變量? (無需從控制器傳遞它們) – jion 2015-07-08 14:40:11