【问题标题】:symfony: routing goes always on the same routesymfony:路由总是在同一条路线上
【发布时间】:2012-05-03 20:07:48
【问题描述】:

我的路由有个大问题:所有页面都匹配同一个路由!!

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 使用特定的路由,但这被忽略了。

你知道如何解决它吗?

非常感谢

【问题讨论】:

    标签: symfony1 symfony-1.4 url-routing


    【解决方案1】:

    Symfony 从上到下匹配路由,因此 symfony 找到匹配的第一条路由被执行。

    您的路由在您的模板中正确展开,但是当发出请求时,symfony 将 /es/obras.html 正确匹配到 @contatti 路由。这是因为 "obras" 匹配 ":contatti" 参数。

    要解决您的问题,您需要为 symfony 提供一种唯一匹配您的 url 的方法。

    希望这对您现在更有意义。

    编辑(独特的路线):

    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)
    

    【讨论】:

    • 是的,我知道 symfony 从上到下匹配路由,但我认为明确地告诉路由的名称然后系统将使用那个...你有一些提示来制作这些路线独特?非常感谢
    • 好的,完美,谢谢。现在有了您的编辑,我已经理解了您的提示......所以这不可能有这样的网址:www.webisite.com/about.html 和 www.website.com/contatti.html?
    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 2019-08-17
    • 2021-04-30
    • 2018-05-03
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多