2012-05-16 5 views
2

В некоторых Symfony2 проекте у меня есть следующее определение маршрутов:Маршрутов в Symfony2

MyBundle_Default: 
    resource: "routing/default.yml" 
    prefix: /{slug}-{resource_id} 
    requirements: 
     slug: "[a-z\-]+" 
     resource_id: "\d+" 

Но это требование не работает. Например, если у меня есть «-» в slug (например, «route-route»), то URL-адрес /test-route-9 не работает.

Это ошибка?

ответ

0

Это опечатка, вы указали это требование на hotel_id, но указали в url resource_id!

+0

спасибо, я исправил его. Но вопрос все еще остается вопросом. – falinsky

+0

Можете ли вы также указать содержание default.yml? –

+0

Это не имеет значения. Существуют регулярные маршруты без параметров. И если я помещаю их в основной файл маршрута (без импорта ресурса с маршрутом), я получаю рабочие конструкции, но с большим количеством «скопирования», которое я не хочу. – falinsky

2

Главным образом, я думаю, что ваша проблема исходит от символа тире. Позволь мне объяснить. Скажем, что введенный URL: /test-route-9. В соответствии с вашими требованиями соответствие слизи должно было бы быть test-route-, потому что ваше регулярное выражение утверждает, что символы находятся между a-z или тире -, которые могут быть сопоставлены.

Regex будет соответствовать всем, что может, поэтому он «съест» символ тире. При «еде» это остальное будет только 9, что было бы неправильно, потому что маршрутизация ожидает другой тире, прежде чем согласовать часть resource_id. Следовательно, этот URL-адрес не будет соответствовать вашим ожиданиям.

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

Fix путем изменения сепаратора в URL:

prefix: /{slug}/{resource_id} 
requirements: 
    slug: "[a-z\-]+" 
    resource_id: "\d+" 

Или:

prefix: /{slug}_{resource_id} 
requirements: 
    slug: "[a-z\-]+" 
    resource_id: "\d+" 

Фикс, изменяя разделитель для заготовки непосредственно:

prefix: /{slug}-{resource_id} 
requirements: 
    slug: "[a-z_]+" 
    resource_id: "\d+" 

Я уверен, что проблема исходит из этого. Не тестировал ничего, но стоит попробовать, чтобы убедиться, что проблема связана с разделителем символов тире.

+0

спасибо, но в предыдущем ответе я прокомментировал рабочие конструкции. И снова мне нужно использовать pattern {slug} - {resource_id} (без косой черты и подчеркивания). – falinsky

0

Попробуйте с

slug: "[a-z\-]+(?<!-)" 

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

Я надеюсь, что это сработает для вас :)

+0

фактически любое регулярное выражение не работает при импорте ресурса. – falinsky

 Смежные вопросы

  • Нет связанных вопросов^_^