Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 如何按路由名称获取路由的默认值_Symfony - Fatal编程技术网

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个)