В моем приложении я использую функцию расширения Symfony Twig path
создать ссылку на другой маршрут. Этот маршрут принимает параметр, поэтому я написал свою функцию пути следующим образом:
<a href="{{ path('r', {p: p}) }}">...</a>
В некоторых случаях заданное значение p
содержит косую черту и Symfony завершается с ошибкой:
«Параметр« p »для маршрута« r »должен соответствовать« [^ /] ++ »(указано« … / … »), чтобы создать соответствующий URL.»)
Я ожидаю, что Symfony справится с этим и автоматически закодирует эти значения URL, но, очевидно, нет (или я делаю что-то не так).
Во всяком случае, мне удалось исправить это с url_encode
Фильтр Twig, вот так:
<a href="{{ path('r', {p: p|url_encode}) }}">...</a>
Теперь в моем контроллере я принимаю этот параметр следующим образом:
/**
* @Route("/a/b/{p}", name="r")
**/
public function someAction($p) {
// ...
}
И, видимо, Symfony не выполняет URL-декодирование этого значения автоматически $p
что я и ожидал.
Я что-то здесь не так делаю, или действительно нужно самостоятельно обрабатывать кодирование / декодирование URL? В документации Symfony я не нахожу никаких подробностей об этом вообще.
Видимо, ограничения параметров по умолчанию не допускают косую черту. После «ослабления» их это сработало:
/**
* @Route("/a/b/{p}", name="r", requirements={"diagramResourceId"=".+"})
**/
public function someAction($p) {
// ...
}
Других решений пока нет …