Я сталкиваюсь с некоторыми проблемами, пытаясь угадать, как обрабатывать URL-адреса с параметрами на Symfony + Twig.
У меня есть этот маршрут:
<route id="artist.front" path="/artist/{kw}/">
<default key="_controller">App\Web\Controllers\Front::homePage</default>
</route>
И этот код в шаблоне Twig:
{% autoescape false %}
<a href="{{ path('artist.front',{'kw':a.urlkeyword|url_encode} )}}">{{ a.name }}</a>
{% endautoescape %}
Параметр urlkeyword
передается как есть (т.е. не кодируется URL ранее) как на конструкторе сущности, так и на его получателе (getURLKeyword).
Однако при визуализации шаблона я получаю этот код HTML:
<a href="/index.php/artist/AC%252FDC/">AC/DC</a>
(Если я удалю url_encode из шаблона, Twig вызывает путь вызова ошибки()).
Целевой контроллер имеет следующий код:
public function artistPage($kw)
{
$decoded = urldecode($kw);
$this->log->info("kw: {$kw}");
$this->log->info("decoded: {$decoded}");
}
и эхо:
kw: AC%2FDC
decoded: AC/DC
поэтому я думаю, что kw корректно считывается с контроллера, но я понимаю, что URL-адрес должен быть закодирован как AC% 2FDC вместо последнего кода HTML на первом месте: строка URLEncoded кодируется дважды.
Является ли AC% 2FDC правильной кодировкой или необходимо использовать двойное кодирование (AC% 252FDC) в Symfony? И, если можно использовать первую (правильную) кодировку URL-адресов, что я делаю неправильно?
пытаться:
<route id="artist.front" path="/artist/{kw}/">
<default key="_controller">App\Web\Controllers\Front::homePage</default>
<requirement key="kw">.+</requirement>
</route>
И удалите кодировку/декодирование URL.