为什么路线要求适用于我的第一条路线而不适用于我的第二条路线?
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 内容的步骤)
感谢所有试图找到问题的人,我学到了一些东西所以我非常感谢(抱歉浪费了时间^^)
我遇到了这个问题:
我的第一条路线不允许我使用任何不是数字的字符(来自正则表达式),这非常有效(如果您需要结果屏幕请告诉我)
但第二个允许我使用任何字符作为 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 内容的步骤)
感谢所有试图找到问题的人,我学到了一些东西所以我非常感谢(抱歉浪费了时间^^)