Можете ли вы заставить Symfony разрешить определенный маршрут? - PullRequest
2 голосов
/ 14 марта 2009

Скажите, что мне нужно выполнить следующие 2 маршрута в следующем порядке:

Zip:
  url: home/:zip
  param: { module: home, action: results }

State:
  url: home/:state
  param: { module: home, action: results }

и я использую маршрут, такой как:

'@State?state=CA'

Почему он переходит на Zip-маршрут? Когда вы явно указали имя маршрута: «@State», я подумал, что он не анализирует весь файл маршрутизации и просто использует определенный маршрут, который вы запрашивали.

Я хотел бы иметь возможность использовать одно и то же действие для отображения данных на основе имени переменной (zip или state). Мне не нужно создавать одно и то же действие (результаты) дважды, чтобы передать другой параметр. .

Ответы [ 3 ]

3 голосов
/ 14 марта 2009

Вам необходимо добавить требования, чтобы он распознавал различные форматы

Zip:
  url: home/:zip
  param: { module: home, action: results }
  requirements: { zip: \d{5} } # assuming only 5 digit zips

State:
  url: home/:state
  param: { module: home, action: results }
  requirements: { state: [a-zA-Z]{2} }

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

1 голос
/ 17 марта 2009

проблема здесь в том, что оба правила маршрутизации разрешаются в несколько одинаковом URL (/ home /) и при создании ссылок он использует правильный именованный маршрут для генерации URL.

Когда вы щелкаете по этому сгенерированному URL (например, / home / CA) без добавления дополнительных требований, оно будет соответствовать первому правилу в файле routing.yml, которое соответствует вашему маршруту Zip.

просто чтобы объяснить, что происходит.

0 голосов
/ 15 марта 2009

Это делает использование названного маршрута. Проблема заключается в том, что ваши URL-адреса совпадают (имя параметра не имеет значения), поэтому при загрузке URL-адреса в браузере первым подходящим маршрутом всегда будет Zip, поскольку у Symfony нет способа узнать, какой из них вы хотите.

Добавление requirements: - путь.

...