Сохранить косую черту в конце маршрута с параметром по умолчанию в Symfony 5.1

#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. Я рассматривал второй маршрут, но подумал, что это будет означать множество беспорядочных изменений во многих шаблонах. Ваш ответ помог мне понять, что у меня может быть два маршрута, но в шаблонах нужно ссылаться только на один с номерами страниц. Спасибо!