2009-03-13 2 views
2

Скажите, что я должен следовать за 2 маршрута в таком порядке:Можете ли вы принудительно разрешить symfony для определенного маршрута?

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

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

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} } 

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

+0

Ahh, хорошо ... так что он фактически не разрешает имя маршрута, он все равно выполняет синтаксический анализ - какая точка уникального имени маршрута тогда? – Failpunk

+0

Хотелось бы, чтобы я мог пить вашу иконку прямо сейчас. – Failpunk

+0

Мне нужно будет увидеть больше кода, как вы используете название маршрута. Я предполагаю, что это в помощнике вида (например, link_to или url_for), но я не уверен. Кроме того, какая версия Symfony? –

0

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

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

+0

Я предполагаю, что там еще немного разбора? Я бы подумал, что если вы укажете конкретное имя маршрута, оно будет игнорировать все другие маршруты и использовать только именованный маршрут, поэтому такой же URL-адрес не будет проблемой. – Failpunk

1

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

Если вы нажмете на этот сгенерированный URL-адрес (например,/home/CA) с дополнительными требованиями, он будет соответствовать первому правилу в файле routing.yml, который соответствует вашему маршруту «Zip».

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