Установка маршрута в зависимости от строки в URL с помощью Symfony - PullRequest
1 голос
/ 12 апреля 2019

Я довольно новичок в Symfony.

Мне нужно проверить, содержит ли URL определенное слово, которое может быть в любом порядке, и если оно есть, оно будет перенаправлено на определенную страницу.

Например, www.example.com/mystring/, www.example.com/content/mystring or www.example.com/001/content/mystring/ должен перенаправить вас на www.example.com/mystring, поскольку он содержит mystring в URL

. Это может быть просто:

$routes->add('mystring', '/mystring/')
    ->controller([MyStringController::class, 'show'])
;

$routes->add('mystring', '{number}/{content}/mystring')
    ->controller([MyStringController::class, 'show'])
;

И т.д., и проблема в том, что mystring может быть где угодно в URL.

У меня уже есть обходной путь в контроллере, который перенаправит вас, если строка, однако я хотел бы получить чистое решение в файле маршрутизации.

Таким образом, вопрос:

Есть ли способ задать маршрут в зависимости от того, содержит ли URL определенную строку, которая может быть где угодно и в любом порядке?

1 Ответ

1 голос
/ 12 апреля 2019

Теоретически да.Заполнитель маршрута обычно не может содержать /, потому что это усложняет ситуацию.Однако есть способы разрешить это.НО, возникают и другие проблемы, если только эта дополнительная магическая строка не всегда имеет приоритет над чем-либо, что происходит.

Чтобы разрешить косую черту внутри заполнителя, это возможно с помощью: https://symfony.com/doc/current/routing/slash_in_parameter.html

так что, по сути, чтобы добавить косую черту, у вас будет маршрут с

'/{url}' и требованием 'url' => '.+'

сейчас, просто '.+' недостаточно для вашей цели, хотя,В этом случае я не совсем уверен в том, что бежать, но, возможно, это будет что-то вроде

'url' => '.*\bmystring\b.*'

, если разрешено \b, это означает, что это граница слова (что, вероятно, то, что вы хотите).

в противном случае '(.+/)*mystring(.+/|$)+' должен сделать трюк

Кроме того, вы не должны называть несколько маршрутов одинаковыми ... также, этот вид определения маршрута не даст вам другие заполнители, которые выhave ...

Если ваш специальный маршрут должен расширять только существующие маршруты, вы, вероятно, должны найти способ циклически проходить по существующим маршрутам и добавить свою волшебную строку.Но это другой вопрос; о)

Надеюсь, это поможет; о)

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