2015-07-10 98 views
1

我遇到了一些问题,试图猜测如何处理Symfony + Twig上的参数。Symfony:处理URL参数的斜杠

我有这样的路线:

<route id="artist.front" path="/artist/{kw}/"> 
<default key="_controller">App\Web\Controllers\Front::homePage</default> 
</route> 

而且在树枝模板的代码:

{% autoescape false %} 
<a href="{{ path('artist.front',{'kw':a.urlkeyword|url_encode})}}">{{ a.name }}</a> 
{% endautoescape %} 

urlkeyword参数传递的是(即未进行网址先前编码)无论在实体构造和在其getter(getURL关键字)上。

然而,呈现模板时我得到这个HTML代码:

<a href="/index.php/artist/AC%252FDC/">AC/DC</a> 

(如果我从模板中删除url_encode枝条引发错误调用路径())。

目标控制器具有此代码:

public function artistPage($kw) 
{ 
    $decoded = urldecode($kw); 
    $this->log->info("kw:  {$kw}"); 
    $this->log->info("decoded: {$decoded}"); 
} 

和呼应:

kw:  AC%2FDC 
decoded: AC/DC 

所以我觉得千瓦从控制器读取正确的,但我理解的URL应编码为AC %2FDC取而代之放在最终的HTML代码上:URLEncoded字符串被编码两次。

AC%2FDC是正确的编码,还是有必要在Symfony中使用双重编码(AC%252FDC)?而且,如果可以使用第一个(正确的)URL编码,我做错了什么?

回答

0

尝试:

<route id="artist.front" path="/artist/{kw}/"> 
    <default key="_controller">App\Web\Controllers\Front::homePage</default> 
    <requirement key="kw">.+</requirement> 
</route> 

,并删除URL编码/解码。

+0

谢谢你的回应。但是,删除编码/解码会使链接的URL /index.php/artist/AC/DC/(即斜杠根本不编码),因此{kw}可能与路径路径的其他部分发生冲突。 例如,如果我以后为“/ artist/{kw}/info”添加了一条新路线,并且我有一个像“something/info”的kw,artist.front会变成“/ artist/something/info”(即kw根本不编码),与kw = something的“/ artist/{kw}/info”页面相冲突。我认为生成的URL应该在这个例子中是“/ artist/something%2finfo/info”(带有kw部分的URL编码)。 –