如何通过路由名称获取路由的默认值

时间:2013-01-10 15:01:13

标签: symfony

我的路线定义如下。

home:
    pattern: /index/index/{show}
    defaults: { _controller: MyBundle:MyIndex:mypage, show: all }
    requirements:
        show:  activeonly|all
        name: ".+"

我想在控制器中做什么, $this->forward ('home', array('show', 'activeonly');

我找不到任何可行的地方。环顾四周,我得到了以下问题和答案。

Symfony 2: How to get route defaults by route name?。但给出(接受)的解决方案不起作用。这是因为,默认值作为对象的私有值返回,无法读取。

很高兴知道,如果无论如何我可以通过它的名字读取路由的_defaults值并使用该值来转发?

2 个答案:

答案 0 :(得分:1)

在控制器内使用:

$defaults = $this->get('router')->getRouteCollection()->get('home')->getDefaults();

获取“主页”路线的默认值。

请勿按其属性_defaults访问默认值,而是使用getter Route::getDefaults()

请参阅Symfony2 API: Symfony\Component\Routing\Route::getDefaults()

但是,正如名称“默认值”所述,您不必在使用该路线时指定它们,因为默认情况下会选择它们。因此,如果您想转发到home路线,只需使用:

$this->forward('MyBundle:MyIndex:mypage');

修改

这非常慢,因为::getRouteCollection()不使用任何缓存,调用它会导致大量耗时的磁盘读取和路由编译。

我已经回答了另一种方法here (Symfony 2: How to get route defaults by route name?)。但请注意:据我所知,使用官方的Symfony API仍无法有效地做到这一点。如果你真的必须快速完成,你需要破解它。

答案 1 :(得分:0)

您必须将forward与控制器名称一起使用,而不是与路由一起使用。

例如:

如果您想要特定值:

$this->forward ('MyBundle:MyIndex:mypage', array('show' =>'activeonly'));

如果您想要默认值:

$this->forward('MyBundle:MyIndex:mypage');

如果您想使用路线,请改用redirect

$this->redirect($this->generateUrl('home'));

一些信息here