Проблема маршрутизации Symfony, маршрут игнорируется - PullRequest
0 голосов
/ 28 июля 2010

В моем app/frontend/config/routing.yml есть следующее:

homepage:
  url:   /
  param: { module: main, action: index }

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

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

sf_guard_register:
  url:   /register
  param: { module: user, action: register }

sf_guard_signin:
  url:   /login
  param: { module: sfGuardAuth, action: signin }

sf_guard_signout:
  url:   /logout
  param: { module: sfGuardAuth, action: signout }

sf_guard_password:
  url:   /request_password
  param: { module: sfGuardAuth, action: password }

Когда я пробую маршрут /register, я получаю это:

Действие "регистрация / индекс" не существует.

Я должен указать, у меня нет модуля "register", и мой пользовательский модуль работает хорошо, если вызывается вручную. Плюс другие маршруты работают нормально.

Любые идеи приветствуются, спасибо!

Ответы [ 3 ]

4 голосов
/ 28 июля 2010

В соответствии с ответом Джереми:

Поскольку ваш маршрут default_index находится выше, переход на /register приводит к совпадению этого маршрута. Поскольку он расположен перед маршрутом sf_guard_register, «учитывается» только первое совпадение.

Ваш routing.yml должен выглядеть так:

sf_guard_register:
  url: /register
  param: { module: user, action: register }

sf_guard_signin:
  url: /login
  param: { module: sfGuardAuth, action: signin }

sf_guard_signout:
  url: /logout
  param: { module: sfGuardAuth, action: signout }

sf_guard_password:
  url: /request_password
  param: { module: sfGuardAuth, action: password }

homepage:
  url: /
  param: { module: main, action: index }

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

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

Кроме того, существует ряд рекомендаций, которым вы, возможно, захотите следовать:

  1. Отключение маршрутов по умолчанию и использование только именованной маршрутизации, такой как @homepage, быстрее, чем поиск Symfony, какой маршрут будет соответствовать при использовании помощников url_for или link_to. Поэтому отключите маршрутизацию по умолчанию и создайте маршруты самостоятельно. Затем используйте имя маршрута при создании URL.
  2. Наиболее часто используемые маршруты следует размещать вверху, например, если у вас есть ссылка для регистрации на всех страницах, вы должны поместить sf_guard_register вверху.

Только мои 5 центов - надеюсь, вы найдете это полезным; -)

1 голос
/ 28 июля 2010

Маршруты обрабатываются в порядке, указанном в вашем файле routing.yml. Таким образом, url / register соответствует маршруту default_index, прежде чем он попадет в sf_guard_register. И default_index, и default должны идти внизу вашего routing.yml файла.

0 голосов
/ 28 июля 2010

Вы должны даже удалить 2 маршрута по умолчанию:

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

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

Так как это плохая практика, и всегда следует создавать определенный маршрут.

Лучший способ добавить маршруты, чтобы подготовить их к вашему файлу, добавляя каждый новый маршрут в самом верху.

Кроме того, хороший способ отладки вашей маршрутизации во внешнем интерфейсе - запустить:увидит, какой маршрут соответствует (и его требования, если таковые имеются)

...