Я получил эту проблему:
Мой первый маршрут запрещает мне использовать любой символ, который не является числом (из регулярного выражения), это прекрасно работает (скажите, если вам нужен экран результата)
Но второй позволяет мне использовать любой символ в качестве идентификатора, я не понимаю, почему я пытался очистить кеш (и многие другие вещи), но он все еще позволяет мне использовать альфа-символы.
В настоящее время у меня есть два варианта этих маршрутов:
<?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);
}
}
Мои шаблоны являются базовыми c Шаблоны Twig (отображающие либо "id", либо "page") Я попытался найти скрытое пространство и что-то, но я не могу найти, где разница (исключая имена "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 |
+--------------+---------------------------------------------------------+
Кажется, что «Требования» не обнаруживаются / не используются по какой-то причине, кто-то знает почему?
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 раза, очень странно: /
ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Спасибо всем, кто пытался найти проблему, я узнал несколько вещей, поэтому я очень благодарен (и извините за потерю времени) ^^)