Маршрут Symfony с косой чертой (/) в параметре не работает

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

#[Route('/getFtp/{customerName}/{taskId}/{domainName}', name: 'get_ftp', requirements: ['domainName' => '.+'])]
public function index(string $customerName, string $taskId, string $domainName): Response

Согласно документации https://symfony.com/doc/6.0/routing.html#slash-characters-in-route-parameters это должно работать.

Это работает для

http://mgr2.example.com/getFtp/quadramedia/abcdef/http:

но не для

http://mgr2.example.com/getFtp/quadramedia/abcdef/http:%2F

🤔 А знаете ли вы, что...
Symfony поддерживает шаблонизацию с использованием Twig, что делает работу с HTML более удобной и безопасной.


89
2

Ответы:

Он работает в версиях Symfony 5.x. Я бы предложил взять domainName в качестве параметра запроса в аргументе. Например:

#[Route('/getFtp/{customerName}/{taskId}', name: 'get_ftp')]
public function index(string $customerName, string $taskId, Request $request): Response
{
  $domainName = $request->query->get('domainName');
  ...
} 

Решено

Использование вашего примера в моем собственном проекте сработало.

Я попробовал этот URL http://127.0.0.1:8080/getFtp/thomas/23/http:%2F

И затем я сбросил свой параметр, чтобы быть уверенным, и получил:

Значит, именно на вашем проекте что-то не так.
Я ожидаю, что что-то вроде другого маршрута совпадает.
Попробуйте определить маршрут в yaml (или просто поверх вашего контроллера) и поставить его поверх всех остальных, чтобы быть полностью уверенным, что это не работает.

Кстати, я пробовал ваш случай в php 8.1 и Symfony 6.2.