您好,如何在路由的URL中强制显示默认参数

我正在开始使用symfony,并且遇到这种情况。

我阅读了文档:

https://symfony.com/pdf/Symfony_getting_started_4.3.pdf

第21页

在注释路径中可能会强制URL包含匹配方法的默认参数,因为我读到的只是在参数名称前加上字符:/ blog / {!页面}

我要在以下代码中测试该功能(取自Symfony文档)

// src/Controller/BlogController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Routing\Annotation\Route; 

class BlogController  
{
      /**
      * @Route("/blog/{page}",name="blog_list")
      */
      public function list(int $page = 1)
      {
          return new Response( 
             '<html></body>Lucky number: '.$page.'</body></html>'
          );
      }

}

如果我在浏览器中编写此代码,效果很好

  

http://localhost/index.php/blog

但是当我尝试完全按照文档中的说明来强制URL显示默认值时,请加上“!”。路径{!中的参数名称之前页面}如下:

  

/ **
     * @Route(“ / blog / {!page}”,name =“ blog_list”)
     * /

它显示以下错误:

  

找不到“ GET / blog”的路线

我不知道我是否在认真阅读文档,但是找不到我做错的事情,感谢您的帮助。

xingwei78 回答:您好,如何在路由的URL中强制显示默认参数

documentation of optional parameters中所述,可以使用{parameter_name?default_value}语法将...默认值内联到每个参数中。

// src/Controller/BlogController.php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class BlogController extends AbstractController
{
    /**
     * @Route("/blog/{page<\d+>?1}",name="blog_list")
     */
    public function list(int $page)
    {
        // ...
    }
}

要为任何参数提供空默认值,请在?之后不添加任何内容。字符(例如/ blog / {page?})。

本文链接:https://www.f2er.com/3122996.html

大家都在问