2013-07-24 98 views
2

是否可以在單個定義中定義多個相同控制器的路由?Symfony2多路由單控制器

例如:

我想有使用的東西

/, /about, /privacy-policy 

_home:  
    pattern: {/ , /about, /privacy-policy} 
    defaults: { _controller: AcmeDemoBundle:Home:index, about, privacy_policy } 

我不想定義單獨定義多條路線的單一定義的建議here

編輯:這是我的源代碼:

<?php 

namespace Acme\DemoBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class HomeController extends Controller 
{ 
    /** 
    * @Route("/") 
    */ 
    public function indexAction() 
    { 
     /* 
     * The action's view can be rendered using render() method 
     * or @Template annotation as demonstrated in DemoController. 
     * 
     */ 
     return $this->render('AcmeDemoBundle:Home:home.html.tpl'); 
    } 
    /** 
    * @Route("/about") 
    */ 
    public function aboutAction() 
    { 
     return $this->render('AcmeDemoBundle:Home:about.html.tpl'); 
    }  
} 

這是routing.yml中

_home: 
    pattern:/
    defaults: { _controller: AcmeDemoBundle:Home:index } 
_welcome: 
    pattern:/
    defaults: { _controller: AcmeDemoBundle:Welcome:index } 
_demo_secured: 
    resource: "@AcmeDemoBundle/Controller/SecuredController.php" 
    type:  annotation 

_demo: 
    resource: "@AcmeDemoBundle/Controller/DemoController.php" 
    type:  annotation 
    prefix: /demo 
+0

如何使用註釋作爲鏈接建議你貼?這是AFAIK唯一的方法... – cheesemacfly

+0

我試過使用,但得到錯誤「找不到路由」GET/about「」,你能告訴我我錯過了什麼嗎?即使對於我的另一種方法「索引」,我也得到錯誤「[語義錯誤] Acme \ DemoBundle \ Controller \ HomeController :: indexAction()方法中的註釋」@Route「從未導入。您是否忘記添加」use 「這個註釋的聲明?」 – neeraj

+0

它是名爲[SensioFrameworkExtraBundle](http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html)的可選包的一部分,此特定功能的配置可在此處找到:http:// symfony .com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html(不要忘記在你的控制器的開頭使用'Sensio \ Bundle \ FrameworkExtraBundle \ Configuration \ Route;'語句) – cheesemacfly

回答

4

的源代碼,如果你不聲明名字路線註釋symfony生成了一。 (「用@Route註釋定義的路由給出了一個由包名稱,控制器名稱和動作名稱組成的默認名稱。」)

通過聲明多個路由symfony生成一個名稱(如果您不'確切地說你的名字)女巫可能會通過保持第一名來覆蓋你的別人路線。

您可以嘗試通過在註釋中爲每條路線創建一個隨機名稱進行測試。

最後一件事就是不要忘記你的根路由文件,通過在文檔中添加一個鏈接到你的包中,就像這個例子。

blog: 
    resource: "@SensioBlogBundle/Controller" 
    type:  annotation 
+0

我只是想定義多個路由在一個單一的定義,逗號分隔或任何其他方式(像@cheesemacfly建議的註釋)然而,我仍然面臨問題使用註釋。你能否就此建議 – neeraj

+1

如果你沒有聲明名字到你的路由註釋symfony生成一個。 (「使用@Route註釋定義的路由被賦予一個由包名,控制器名和動作名組成的默認名稱。」來自http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing .html)通過聲明多個路由symfony生成一個名字(如果你不確定你的名字)女巫可能會通過保持第一個名字來覆蓋你的其他路線。您可以嘗試通過爲您的註解中的每條路線創建一個隨機名稱進行測試。 –

+0

它現在工作了!非常感謝您的回覆。你可能想要更新你的答案,說明在/app/config/routing.yml中激活路由,並使用註釋,這樣我就可以加註並接受它作爲正確的答案。 – neeraj

2

[語義錯誤]在方法Debril \ RssAtomBundle \控制器\ YOURController ::的indexAction註釋 「@Template」()從未被導入。你可能忘記爲這個註釋添加一個「使用」語句嗎?

必須添加兩個用在YOURController:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; 
+1

這實際上解決了我的問題!謝謝。 – Dominik