为什么路线要求适用于我的第一条路线而不适用于我的第二条路线?

Why does route requirements works for my first route and not for my second one?

我遇到了这个问题:

我的第一条路线不允许我使用任何不是数字的字符(来自正则表达式),这非常有效(如果您需要结果屏幕请告诉我)

但第二个允许我使用任何字符作为 id,我不明白为什么,我已经尝试清除缓存(和许多其他东西)但它仍然允许我使用字母字符。

我目前有这两条路线:

<?php
// src/Controller/AdvertController.php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

/**
 * @Route("/advert")
 */
class AdvertController extends AbstractController
{
  /**
   * @Route("/{page}", name="oc_advert_index", requirements={"page" = "\d+"}, defaults={"page" = 1})
   */
  public function index(Environment $twig, $page)
  {
    $content = $twig->render('Advert/index.html.twig', ['page' => $page, 'name' => 'alex']);

    return new Response($content);
  }


  /**
   * @Route("/view/{id}", name="oc_advert_view", requirements={"id" = "\d+"})
   */
  public function view(Environment $twig, $id)
  {
    $content = $twig->render('Advert/view.html.twig', ['id' => $id, 'name' => 'alex']);

    return new Response($content);
  }
}

我的模板是基本的 Twig 模板(显示 "id" 或 "page") 我试图寻找隐藏的 space 和一些东西,但我找不到区别在哪里(不包括名称 "id" 和 "page")

EDIT1:执行 php bin/console router/match /advert/view/abc:

时我得到了什么

 [OK] Route "oc_advert_view" matches                                                                                    


+--------------+---------------------------------------------------------+
| Property     | Value                                                   |
+--------------+---------------------------------------------------------+
| Route Name   | oc_advert_view                                          |
| Path         | /advert/view/{id}                                       |
| Path Regex   | #^/advert/view/(?P<id>[^/]++)$#sDu                      |
| Host         | ANY                                                     |
| Host Regex   |                                                         |
| Scheme       | ANY                                                     |
| Method       | ANY                                                     |
| Requirements | NO CUSTOM                                               |
| Class        | Symfony\Component\Routing\Route                         |
| Defaults     | _controller: App\Controller\AdvertController::view      |
| Options      | compiler_class: Symfony\Component\Routing\RouteCompiler |
|              | utf8: true                                              |
+--------------+---------------------------------------------------------+

由于某种原因,"Requirements" 似乎不是 detected/used,有人知道为什么吗?

EDIT2:这是我在做 php bin/console router:match /advert/123

时得到的

 [OK] Route "oc_advert_index" matches                                           


+--------------+---------------------------------------------------------+
| Property     | Value                                                   |
+--------------+---------------------------------------------------------+
| Route Name   | oc_advert_index                                         |
| Path         | /advert/{page}                                          |
| Path Regex   | #^/advert(?:/(?P<page>\d+))?$#sDu                       |
| Host         | ANY                                                     |
| Host Regex   |                                                         |
| Scheme       | ANY                                                     |
| Method       | ANY                                                     |
| Requirements | page: \d+                                               |
| Class        | Symfony\Component\Routing\Route                         |
| Defaults     | _controller: App\Controller\AdvertController::index     |
|              | page: 1                                                 |
| Options      | compiler_class: Symfony\Component\Routing\RouteCompiler |
|              | utf8: true                                              |
+--------------+---------------------------------------------------------+

在这里我们可以看到它检测到正则表达式,感觉这是一个拼写错误,但我至少有 3 次 copy/pasted,很奇怪:/


最终编辑: 感谢所有试图找到问题的人,我学到了一些东西所以我非常感谢(很抱歉浪费了时间^^)

已解决:config/routes.yaml 和我的路由之间存在冲突,我不得不删除重复的路由。 (我遵循了一个过程,我们首先在 config/routes.yaml 中声明它,然后我们用注释声明路由,忘记了删除 config/routes.yaml 内容的步骤)

感谢所有试图找到问题的人,我学到了一些东西所以我非常感谢(抱歉浪费了时间^^)