0

我有如下定义的路线。

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

很高兴知道,如果无论如何我可以通过名称读取路由的 _defaults 值并使用该值进行转发?

4

2 回答 2

1

在您的控制器内部使用:

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

获取“home”路由的默认值。

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

请参阅Symfony2 API:Symfony\Component\Routing\Route::getDefaults()

但正如名称“默认值”所述,您不必在使用该路由时指定它们,因为默认情况下会选择它们。因此,如果您想转发到您的home路线,只需使用:

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

编辑

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

我在这里回答了另一种方法(Symfony 2: How to get route defaults by route name?)。但请注意:据我所知,使用官方 Symfony API 仍然无法有效地做到这一点。如果你真的必须快速完成,你需要破解它。

于 2013-01-10T15:27:23.993 回答
0

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

例如:

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

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

如果你想要默认值:

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

如果要使用路由,请redirect改用。

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

这里有一些信息

于 2013-01-10T15:27:36.053 回答