2016-02-26 107 views
1

我被要求在客戶的網站上修復損壞的聯繫表格。當提交表單時,應該會觸發emailsend操作,但似乎不起作用。我已經檢查過路由器,在我看來,有兩條路由/contact,這意味着這個動作永遠不會被觸發,因爲這條路徑已經滿足了其他路由的要求。我的理解是正確的嗎?如果是這樣,我不明白爲什麼聯繫表格應該在以前工作!Symfony2路由器配置是否正確?

foo_core_homepage: 
    path: /
    defaults: { _controller: FooCoreBundle:Default:index } 

foo_core_ourwork: 
    path:  /work 
    defaults: { _controller: FooCoreBundle:Default:clients } 

foo_core_services: 
    path:  /services 
    defaults: { _controller: FooCoreBundle:Default:services } 
​ 
foo_core_contact: 
    path:  /contact 
    defaults: { _controller: FooCoreBundle:Default:contactMobile } 
​ 
foo_core_findus: 
     path:  /findus 
     defaults: { _controller: FooCoreBundle:Default:findus } 

foo_core_email_send: 
    path: /contact 
    defaults: { _controller: FooCoreBundle:Default:emailsend } 
+0

路由按定義順序進行評估。當找到匹配項時,它停止搜索,選擇該路線並運行它。您需要定義從最嚴格到最不嚴格的路線,以避免這些問題。 – hasumedic

+0

謝謝。我沒有寫這個路由器,實際上我之前沒有用過Symfony。我糾正最後一條路線永遠不會匹配嗎? – Magicode

+1

是'foo_core_email_send'永遠不會被調用 –

回答

2

你說得對,使用相同路徑的兩條路線之一將不可用。
您可以使用debug:router命令檢查其中哪一個,但它肯定是最後一個。

者區分它們的方法是像下面這樣定義不同的要求:

foo_core_contact: 
    path:  /contact 
    defaults: { _controller: FooCoreBundle:Default:contactMobile } 
    requirements: 
     methods: GET​ 

foo_core_email_send: 
    path: /contact 
    defaults: { _controller: FooCoreBundle:Default:emailsend } 
    requirements: 
     methods: POST 

注意:我不知道你的表格的顯示方式,同樣因爲它是如何處理的,這樣你就不會沒有關於打電話的其他問題或者沒有提交的良好路線。

+0

謝謝,我會這麼做的。我不確定這本來是如何工作的!也許他們只是沒有注意到他們沒有收到任何電子郵件。 :/ – Magicode

+1

不客氣!如果問題仍然存在,請不要猶豫再問另一個問題,我很樂意幫助您進行調試。 – chalasr