在Symfony2中通过URL中的插件替换空格

时间:2014-12-28 22:31:42

标签: php symfony url

如果我在Symfony2中使用空格生成一个URL,例如:

example.com/some text

然后此网址显示在网站上:

example.com/some%20text

如何设置替换空格,而不是%20?

在这种情况下:

example.com/some+text

我需要通用解决方案,而不是在所有网址中添加|替换('%20','+')。

2 个答案:

答案 0 :(得分:0)

谢谢大家的回答,我找到了自己的解决方案。

在MainBundle \ Resources \ config \ services.yml中添加了

parameters:
    router.options.generator_base_class: Melofania\MainBundle\UrlGenerator

创建文件MainBundle \ UrlGenerator.php

namespace Melofania\MainBundle;

use Symfony\Component\Routing\Generator\UrlGenerator as BaseUrlGenerator;

class UrlGenerator extends BaseUrlGenerator
{
    protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens)
    {
        $url = parent::doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens);

        return str_replace('%20', '+', $url);
    }
}

但相反的程序还没有解决方案。我的意思是,带有插件的网址=>控制器中带空格的路由参数。我尝试使用UrlMatcher,但没有成功。如果您有答案,请在此页面上写下: Convert values of route parameters dynamically in Symfony 2

答案 1 :(得分:0)

我找到了一个解决方案,它对我有用。首先,我创建了一个编码/解码url的服务。所以你在控制器中str_replace('--the escape character--','+')(使用服务或其他替代方案),你会得到这样的东西:

myRoute:
    path: /{argument}
    controller: sampleController

原始网址:

http://example.com/lorem+ipsum

所以在这里sampleController会得到$argument这样的内容:

$argument = 'lorem+ipsum';

在这里你只是解码它:

$theOriginal = str_replace('+','%20',$argument);

对于twig,如果需要显示,只需添加“Replace”过滤器:

{{ app.request.attributes.get('_route_params')['argument']|replace('+',' --the escape character--')}}