Главным образом, я думаю, что ваша проблема исходит от символа тире. Позволь мне объяснить. Скажем, что введенный 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+"
Я уверен, что проблема исходит из этого. Не тестировал ничего, но стоит попробовать, чтобы убедиться, что проблема связана с разделителем символов тире.
спасибо, я исправил его. Но вопрос все еще остается вопросом. – falinsky
Можете ли вы также указать содержание default.yml? –
Это не имеет значения. Существуют регулярные маршруты без параметров. И если я помещаю их в основной файл маршрута (без импорта ресурса с маршрутом), я получаю рабочие конструкции, но с большим количеством «скопирования», которое я не хочу. – falinsky