0

ルーティングに大きな問題があります: すべてのページが同じルートに一致します!!

ルーティング.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 シンタックスを使用したので、特定のルートを使用するよう symfony に指示しますが、これは無視されます。

それを解決する方法について何か考えはありますか?

どうもありがとう

4

1 に答える 1

2

symfony はルートを上から下に照合するため、symfony が一致を見つけた最初のルートが実行されます。

ルートはテンプレートで正しく展開されますが、リクエストが作成されると/es/obras.html、symfony は正しく@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)
于 2012-05-03T20:42:26.230 に答える