Symfony 如何按路由名称获取路由的默认值
我的路线定义如下Symfony 如何按路由名称获取路由的默认值,symfony,Symfony,我的路线定义如下 home: pattern: /index/index/{show} defaults: { _controller: MyBundle:MyIndex:mypage, show: all } requirements: show: activeonly|all name: ".+" 我想在控制器中做的是, $this->forward('home',array('show','activeonly'); 我找不到任何
home:
pattern: /index/index/{show}
defaults: { _controller: MyBundle:MyIndex:mypage, show: all }
requirements:
show: activeonly|all
name: ".+"
我想在控制器中做的是,
$this->forward('home',array('show','activeonly');
我找不到任何可能的地方。环顾四周,我得到了以下问题和答案
.但给出的(已接受的)解决方案不起作用。这是因为,默认值作为对象的私有值返回,无法读取
如果我能通过名称读取路由的默认值并使用该值转发,那就太好了。在控制器内部使用:
$defaults = $this->get('router')->getRouteCollection()->get('home')->getDefaults();
获取“主”路线的默认值
不要通过其属性访问默认值\u defaults
,而是使用getter路由::getDefaults()
$this->redirect($this->generateUrl('home'));
看
但正如名称“Default value”所述,在使用该路由时,您不必指定它们,因为它们将在默认情况下被选择。因此,如果您想转发到您的主页
路由,只需使用:
$this->forward('MyBundle:MyIndex:mypage');
编辑
这真的很慢,因为::getRouteCollection()
不使用任何缓存,调用它将导致大量耗时的磁盘读取和路由编译
我已经回答了另一种方法。但请注意:据我所知,使用官方的Symfony API仍然无法有效地做到这一点。如果你真的必须快速完成,你需要通过黑客破解。你必须使用带有控制器名称的
转发,而不是路由
e、 g:
如果需要特定的值:
$this->forward ('MyBundle:MyIndex:mypage', array('show' =>'activeonly'));
如果需要默认值:
$this->forward('MyBundle:MyIndex:mypage');
如果要使用路由,请改用重定向
$this->redirect($this->generateUrl('home'));
一些信息非常感谢。这正是我遗漏的警告:使用getRouteCollection()
会破坏您的性能,因为它不会缓存生成的routes@WiR3D你完全正确,我几乎忘记了这个答案。2017年,我在另一个问题中再次回答了这个问题(比这一个老,但问的问题完全相同):-底线:使用Symfony API不可能有效地做到这一点,如果你真的需要这样做,你仍然需要通过黑客破解。非常有效的点GreenLeaf。但我不能重定向,因为路由也可以使用POST方法。当我尝试时,我希望我可以使用这个->转发('MyBundle\Controller\MyIndexController::mypageAction',array('show'=>'activeonly')可以工作,其中第一个参数是来自路由器默认值的值。我希望,我没有遗漏任何内容。为什么不在使用默认值时只调用不带参数的路由?forward不能使用路由名称。我不能使用重定向(我可以使用路由器名称)正如我在下面提到的,参数在值和数字上是动态的,而且更多(最多15个)