是否有一个Symfony助手来获取当前操作URL并更改一个或多个查询参数?

Ryt*_*mis 6 php symfony1

我想要做的是获取当前操作的路由以及任何和所有路由和查询字符串参数,并将单个查询字符串参数更改为其他参数.如果参数在当前请求中设置,我希望它被替换.如果没有,我想补充一下.是否有这样的帮助,或者我需要自己编写?

谢谢!

[编辑:]男,我不知道我真正想做什么.我想生成"此页面"的URL,但更改其中一个变量.想象一下,我所在的页面是一个搜索结果页面,上面写着"没有结果,但尝试其中一个",然后是一堆链接.链接将包含所有搜索参数,除了我将更改每个链接的参数.

Fel*_*ing 5

编辑:

好的,我现在有了更好的想法.我不知道这是否是最好的方法,但你可以尝试这个(在视图中):

url_for('foo', 
        array_merge($sf_request->getParameterHolder()->getAll(), 
                    array('bar' => 'barz'))
)
Run Code Online (Sandbox Code Playgroud)

如果你经常使用它我建议你创建自己的帮助器,就像包装器一样url_for.

或者,如果您只需要请求参数的子集,请执行以下操作:

url_for('foo', 
         array_merge($sf_request->extractParameters(array('parameter1', 'parameter3')),
                     array('bar' => 'barz'))
)
Run Code Online (Sandbox Code Playgroud)

(我以这种方式编写代码以提高可读性)


原答案:

我不知道你想在哪里更改参数(在控制器中?),但是如果你有权访问当前sfRequest对象,那么应该这样做:

$request->setParameter('key', 'value')
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式定义操作来获取请求对象:

public function executeIndex($request) {
     // ...
}
Run Code Online (Sandbox Code Playgroud)

或这个

public function executeIndex() {
     $request = $this->getRequest();
}
Run Code Online (Sandbox Code Playgroud)