【问题标题】:Hello, how to force show default parameters in te URL in a route您好,如何强制在路由中的 URL 中显示默认参数
【发布时间】:2020-03-07 07:58:39
【问题描述】:

我正在启动 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 显示默认值时,输入“!”在路由中的参数名称之前 {! page}如下:

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

它显示以下错误:

找不到“GET /blog”的路由

我不知道我是否阅读文档不好,但我找不到我做错了什么,感谢任何帮助。

【问题讨论】:

  • 考虑使用指向您引用的文档的链接更新您的问题。我懒得自己去查了。
  • 你使用的是 Symfony 4.3 吗?
  • 你好 Cerad,是的,我正在使用 Symfony 4.3.5
  • 我在一个新项目中得到了同样的“找不到路线”。尝试了一些东西,但无法绕过它。在 github 上没有找到任何相关的问题。也许别人有答案。或者可以试试 Symfony slack 频道。

标签: symfony parameters routes annotations documentation


【解决方案1】:

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?})。

【讨论】:

  • 问题是关于使用 !page 这将导致总是使用页面参数生成 url。这些文档有些误导。添加!导致 /blog 生成路由未找到错误。
  • Ok, ...“例如强制生成/blog/1而不是前面示例中的/blog”表示“/blog”不能存在。我想。
  • 不符合the docs。这 !运算符应该适用于 url 生成,而不是实际路由。但至少可以说文档令人困惑。无论如何,因为您的答案不包括!那么它似乎与问题无关。
猜你喜欢
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 2020-05-17
相关资源
最近更新 更多