在 Symfony 5.1 中使用默认参数在路由中保留尾部斜杠

Keep trailing slash in route with default parameter in Symfony 5.1

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 时如何保留尾部斜杠?

根据https://symfony.com/doc/4.1/routing/optional_placeholders.html “末尾带有可选参数的路由将不会匹配带有尾部斜杠的请求(即 /blog/ 将不匹配,/blog 将匹配)。”

因此,如果您不是绝对关心尾部斜杠,只需添加一个 defaults={"page"=1} 即可。但是,如果您真的这样做了……我认为没有比使用“/article/”添加第二个@Route 更好的选择了。由于您的方法具有参数的默认值,因此它应该可以工作。