我遇到了一些问题,试图猜测如何在Symfony + Twig上处理带有参数的URL。
我有这条路线:
<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
参数在实体构造函数和getter(getURLKeyword)上按原样传递(即先前未进行URL编码)。
但是,在渲染模板时,我得到以下HTML代码:
<a href="/index.php/artist/AC%252FDC/">AC/DC</a>
(如果我从模板中删除url_encode,则抛出一个错误,调用path())。
目标控制器具有以下代码:
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是正确的编码,还是必须在Symfony中使用双重编码(AC%252FDC)?并且,如果可以使用第一个(正确的)URL编码,我做错了什么?
尝试:
<route id="artist.front" path="/artist/{kw}/">
<default key="_controller">App\Web\Controllers\Front::homePage</default>
<requirement key="kw">.+</requirement>
</route>
并删除url编码/解码。