#symfony #routes #trailing-slash
#symfony #маршруты #завершающая косая черта
Вопрос:
Symfony 5.1
Я обновляю некоторый устаревший код, и мне нужны следующие маршруты для соответствия:
/article / <— соответствует странице 1 по умолчанию и имеет косую черту
/article / 2 <— соответствует страницам со 2 по n без косой черты
Если я использую аннотацию маршрута…
* @Route("/article/{page}", name="article_show", requirements={"page"="d "})
* @param int $page
* @return Response
*/
public function show(int $page = 1) {
он перенаправляет /article/ на /article, удаляя косую черту в конце. /article/2 работает.
Как мне сохранить косую черту в конце, когда страница равна 1?
Ответ №1:
Согласно https://symfony.com/doc/4.1/routing/optional_placeholders.html «Маршруты с необязательными параметрами в конце не будут совпадать при запросах с косой чертой в конце (т. Е. /blog/ не будет совпадать, /blog будет совпадать)».
Так что, если вас абсолютно не волнует наличие косой черты в конце, просто добавьте defaults={"page"=1}
. Однако, если вы действительно это сделаете… Я не вижу лучшего варианта, чем добавление второго @Route с «/article/». Поскольку ваш метод имеет значение по умолчанию для параметра, он должен работать.
Комментарии:
1. Я рассматривал второй маршрут, но подумал, что это будет означать множество беспорядочных изменений во многих шаблонах. Ваш ответ помог мне понять, что у меня может быть два маршрута, но в шаблонах нужно ссылаться только на один с номерами страниц. Спасибо!