我在尝试猜测如何使用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编码,我做错了什么?
答案 0 :(得分:1)
尝试:
<route id="artist.front" path="/artist/{kw}/">
<default key="_controller">App\Web\Controllers\Front::homePage</default>
<requirement key="kw">.+</requirement>
</route>
删除网址编码/解码。