在路由文件中使用自定义键

时间:2011-12-16 23:47:30

标签: routing symfony

无论如何在Symfony2项目的路由文件中添加自定义键/值对,然后在控制器中读取它?

例如:

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

我想使用这些键/值对为我的一个项目添加一些动态行为。例如,我可以使用自定义键/值对读取所有路径并将其显示给用户,以便在动态菜单中使用。

3 个答案:

答案 0 :(得分: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');

答案 1 :(得分:1)

您可以将键/值对添加到defaults部分,然后在控制器中读取它:

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

在控制器中:

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

它应该有用。

答案 2 :(得分:0)

尽管@ alessandro1997提出的方法运行正常但我找到了另一种方法(我认为这样做更好):

您可以将键/值对添加到路线的options部分 它更好,因为它不会与传递给控制器​​的参数混乱(我想是的,如果我错了,请纠正我。)