2012-05-03 31 views
0

我有一個路由的大問題:所有頁面匹配相同的路由!symfony:路由總是在相同的路由

的routing.yml

# default rules 
homepage: 
    url: /
    param: { module: home, action: index } 

# generic rules 
# please, remove them by adding more specific rules 

localized_homepage: 
    url: /:sf_culture/ 
    param: { module: home, action: index } 
    requirements: 
    sf_culture: (?:it|en|es|fr) 

change_language: 
    url: /change_language 
    param: { module: language, action: changeLanguage } 

contatti: 
    url: /:sf_culture/:contatti.html 
    param: { module: contatti, action: index } 
    requirements: 
    sf_culture: (?:it|en|es|fr) 

about: 
    url: /:sf_culture/:about.html 
    param: { module: about, action: index } 
    requirements: 
    sf_culture: (?:it|en|es|fr) 

opera_slug: 
    url: /:sf_culture/opere/:operaslug.html 
    class: sfDoctrineRoute 
    param: { module: opera, action: permalink } 
    options: { model: Opera, type: object } 
    requirements: 
    sf_culture: (?:it|en|es|fr) 

opere: 
    url: /:sf_culture/:opere.html 
    param: { module: opera, action: index } 
    requirements: 
    sf_culture: (?:it|en|es|fr) 


default_index: 
    url: /:module 
    param: { action: index } 

default: 
    url: /:module/:action/* 

_header.php

<ul> 
<li><?php echo link_to(__('Home'), '@homepage') ?></li> 
<li><?php echo link_to(__('About'), '@about?about='.strtolower(__('About'))) ?></li> 
<li><?php echo link_to(__('Works'), '@opere?opere='.strtolower(__('Works'))) ?></li> 
<li><?php echo link_to(__('Contacts'), '@contatti?contatti='.strtolower(__('Contacts'))) ?></li> 
</ul> 

當我點擊我的菜單(_header)上的按鈕,我總是重定向到的聯繫人頁面,看日誌,我可以看到

Match route "contatti" (/:sf_culture/:contatti.html) for /es/obras.html with parameters array ('module' => 'contatti', 'action' => 'index', 'sf_culture' => 'es', 'contatti' => 'obras',) 

怎麼可能?我使用了@route sintax,所以我告訴symfony使用特定的路由,但這被忽略。

你對如何解決它有什麼想法嗎?

非常感謝

回答

2

Symfony的比賽路線從頂部到底部,這樣的symfony發現了被執行比賽的第一途徑。

您的路線在您的模板中正確展開,但是當請求發出時,symfony會正確匹配/es/obras.html@contatti的路線。發生這種情況是因爲「obras」與「:contatti」參數匹配。

爲了解決你的問題,你需要給symfony一個唯一匹配你的網址的方法。

希望這對你更有意義。

編輯(唯一途徑):

contatti: 
    url: /:sf_culture/contact/:contatti.html 
    param: { module: contatti, action: index } 
    requirements: 
    sf_culture: (?:it|en|es|fr) 

about: 
    url: /:sf_culture/about/:about.html 
    param: { module: about, action: index } 
    requirements: 
    sf_culture: (?:it|en|es|fr) 
+0

是的,我知道,symfony的從上到下一致的路線,但我想明確告訴路線的名字,那麼系統將使用那一個。 ..你有一些提示讓這些路線獨一無二嗎?非常感謝 – satboy78

+0

@ satboy78編輯我的回答 – ilanco

+0

好,完美,謝謝。現在與您的編輯我已經瞭解您的提示...所以這是不可能有像這樣的網址:www.webisite.com/about.html和www.website.com/contatti.html? – satboy78