我的路线定义如下。
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值并使用该值来转发?
答案 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