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
Если вам нужен конкретный формат, дайте мне знать, и я обновлю используемый шаблон требований до более подходящего.