2013-01-10 158 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