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

Симфони 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, удаляя завершающую косую черту. /статья/2 работы.

Как сохранить косую черту, когда страница равна 1?


person hipnosis    schedule 11.09.2020    source источник


Ответы (1)


Согласно https://symfony.com/doc/4.1/routing/Optional_placeholders.html Маршруты с необязательными параметрами в конце не будут соответствовать запросам с косой чертой в конце (т. е. /blog/ не будет соответствовать, /blog будет соответствовать).

Поэтому, если вам не нужна косая черта в конце, просто добавьте defaults={"page"=1} . Однако, если вы действительно это делаете... Я не вижу лучшего варианта, чем добавить второй @Route с /article/. Поскольку ваш метод имеет значение по умолчанию для параметра, он должен работать.

person FTW    schedule 11.09.2020
comment
Я рассматривал второй путь, но думал, что это будет означать много беспорядочных правок во многих шаблонах. Ваш ответ помог мне понять, что у меня может быть два маршрута, но мне нужно только сослаться на тот, у которого есть номера страниц в шаблонах. Спасибо! - person hipnosis; 11.09.2020