我有一个定义如下的路由。
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'));
这里有些信息