Symfony 3 Маршрутизация, допускающая дефисы / тире в значении-заполнителе

У меня проблема с маршрутом в Symfony, у меня есть настройка маршрута, которая должна соответствовать ниже:

/my-test-route-holidays/

Вышеуказанный "my-test-route" является переменной-заполнителем.

Маршрут в Symfony выглядит следующим образом:

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }

Symfony не может найти маршрут, маршрут, как показано ниже, работает без черточек / дефисов в переменной:

/test-holidays/

Итак, мой вопрос: как я могу разрешить дефисы внутри заполнителя маршрута?

Спасибо

1 ответ

Решение

Мне удалось решить это самому, это был быстрый просмотр документации, которая привела меня к неправильному ответу.

Я сталкивался с этой страницей на веб-сайте Symfonys несколько раз, пытаясь найти ответ: Symfony Docs Current Slash в параметре

В их примере:

share:
    path:     /share/{token}
    defaults: { _controller: AppBundle:Default:share }
    requirements:
        token: .+

Вы можете видеть, что они добавили "требования" и под этим "токеном" я просто предположил, что "токен" был как-то связан с регулярным выражением, но на самом деле это относится к заполнителю, который у вас есть на вашем "пути", и они должны совпадать.

Ниже то, что у меня было:

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
  requirements:
      token: .+

Но на самом деле мне нужно было заменить "токен" в разделе "требования" на "var".

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
  requirements:
      var: .+

И что вы знаете, это работает!

Я надеюсь, что кто-то еще находит это полезным.

Будь осторожен с .+ поскольку он будет соответствовать "любому" символу, включая /символы косой черты, используемые для разделения маршрутов.
например:/@nY-th1nG/can/../~/go$foo-holidays

Поскольку requirements принимает регулярное выражение, для сопоставления дефисов я рекомендую использовать [-\w]+вместо. Какие совпадения-a-zA-Z0-9_ 1 или более раз.

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
  requirements:
      var: [-\w]+

Пример https://3v4l.org/c712H

Разрешение

/01234578247-AbC-19082-Zx-holidays 

Исключая такие пути, как /$-holidays или /test/12-holidays


Если вы ожидаете только цифровые даты, вы можете использовать [-\d]+ или для более строгих требований к принятым форматам дат \d{1,4}(-\d{1,2})?. 0-9999 с последующим необязательным тире и 0-99

overview:
  path: /{var}-holidays/
  defaults: { _controller: AppBundle:Overview:index }
  requirements:
      var: [-\d]+ #or \d{1,4}(-\d{1,2})?

Что позволит

/190-holidays
/190-02-holidays

Исключая такие пути, как /2019-a-holidays а также /a-2019-holidays

Если вам нужен конкретный формат, дайте мне знать, и я обновлю используемый шаблон требований до более подходящего.

Другие вопросы по тегам