如何根据路由名称获取路由的缺省值



我有一个定义如下的路由。

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:如何通过路由名获取路由默认值?。但是给出(接受)的解决方案不起作用。这是因为default是作为对象的私有值返回的,这个私有值是无法读取的。

这将是伟大的知道,如果有无论如何,我可以通过它的名称读取路由的_defaults值,并使用该值转发?

在你的控制器内部使用:

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

获取home路由的默认值

不要通过属性_defaults访问默认值,而是使用getter Route::getDefaults()

见Symfony2 API: SymfonyComponentRoutingRoute::getDefaults()

但是正如名称"Default value"所表明的那样,当使用该路由时,你不必指定它们,因为它们将被默认选择。因此,如果您想转发到home路由,只需使用:

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

编辑

这真的很慢,因为::getRouteCollection()没有使用任何缓存,调用它会导致大量的磁盘读取和路由编译时间。

我在这里回答了另一种方法(Symfony 2:如何通过路由名称获取路由默认值?)。但请注意:据我所知,仍然没有办法使用官方Symfony API有效地做到这一点。

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

e。g:

如果你想要一个特定的值:

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

如果你想要默认值:

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

如果您想使用路由,请使用redirect

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

这里有些信息

最新更新