Почему требования к маршруту работают для моего первого маршрута, а не для моего второго? - PullRequest
1 голос
/ 17 февраля 2020

Я получил эту проблему:

Мой первый маршрут запрещает мне использовать любой символ, который не является числом (из регулярного выражения), это прекрасно работает (скажите, если вам нужен экран результата)

Но второй позволяет мне использовать любой символ в качестве идентификатора, я не понимаю, почему я пытался очистить кеш (и многие другие вещи), но он все еще позволяет мне использовать альфа-символы.

В настоящее время у меня есть два варианта этих маршрутов:

<?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 раза, очень странно: /


ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Спасибо всем, кто пытался найти проблему, я узнал несколько вещей, поэтому я очень благодарен (и извините за потерю времени) ^^)

1 Ответ

0 голосов
/ 21 февраля 2020

РАЗРЕШЕНО: Были конфликты между config / rout.yaml и моими маршрутами, мне пришлось удалить дублированный маршрут. (Я прошел курс, где мы сначала объявляем его в config / rout.yaml, а затем мы объявляем маршруты с аннотациями, забыл шаг удаления содержимого config / rout.yaml)

Спасибо всем, кто попробовал чтобы найти проблему, я узнал несколько вещей, поэтому я очень благодарен (и извините за трату времени ^^)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...