2013-01-10 160 views
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: How to get route defaults by route name?。但解决方案(接受)不起作用。这是因为,默认值是作为一个对象的私有值返回的,无法读取。

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

+0

为什么你不一样,你使用默认值呼叫路由不带参数? – AlterPHP

+0

转发不会与路由名称一起使用。我不能使用重定向(我可以使用路由器名称),正如我在下面提到的那样,这些参数在数值和数字以及更多(最多15个)中都是动态的。 – Webghost

回答

1

里面你的控制器使用方法:

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

得到 '家' 路线的默认值。

请勿按其属性_defaults访问默认设置,而应使用获取者Route::getDefaults()来代替。

Symfony2 API: Symfony\Component\Routing\Route::getDefaults()

但是,随着名为“默认值”的状态,你没有使用路由时,因为它们会被默认选择specifiy他们。所以,如果你想转发给您的home路线简单地使用:

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

非常感谢。这正是我所缺少的 – Webghost

0

你必须使用forward与控制器名称,不与路线。

e.g:

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

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

如果你想默认值:

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

如果您想使用的路由,使用redirect来代替。

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

一些信息here

+1

非常有效的一点GreenLeaf。但是我不能做重定向原因,路由也可以使用POST方法。 当我试验时,它看起来可以使用this-> forward('MyBundle \ Controller \ MyIndexController :: mypageAction',array('show'=>'activeonly'))工作,其中第一个参数是值这来自路由器默认值。 我希望我不会错过任何东西。 – Webghost