我的路由问题很严重:所有网页都匹配相同的路由!!
的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使用特定的路由,但这被忽略了。
你对如何解决它有任何想法吗?
非常感谢
答案 0 :(得分: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)