Httprequest 从Symfony 4.4 HttpFoundation\Request中删除参数并重新生成URL

Httprequest 从Symfony 4.4 HttpFoundation\Request中删除参数并重新生成URL,httprequest,symfony4,symfony-4.4,Httprequest,Symfony4,Symfony 4.4,我需要重新生成页面的URL,删除其他参数。例如:当我收到: https://example.com/bao1/bao2/?removeMe1=anything&keepMe1=anything&removeMe2=&keepMe2=anything 我想展示一下: https://example.com/bao1/bao2/?keepMe1=anything&keepMe2=anything 我自动连线请求(我喜欢自动连线): 然后我就这样玩: public

我需要重新生成页面的URL,删除其他参数。例如:当我收到:

https://example.com/bao1/bao2/?removeMe1=anything&keepMe1=anything&removeMe2=&keepMe2=anything
我想展示一下:

https://example.com/bao1/bao2/?keepMe1=anything&keepMe2=anything
我自动连线请求(我喜欢自动连线):

然后我就这样玩:

public function getCleanUrl()
{
     // HttpFoundation\Request 
     $currentHttpRequest = $this->httpRequest->getCurrentRequest();

     // Trying to remove the parameters
     currentHttpRequest->query->remove("removeMe1");

     //
     return $currentHttpRequest->getUri()
}


query->remove(“removeMe1”)
可以工作,但是当我调用
getUri()
时,我仍然会得到完整的输入url,就好像从来没有调用过remove()。我想我可能没有调用某种类型的
$currentHttpRequest->regenerate()->getUri()
,但我找不到任何东西。

我必须让它工作,所以我设计了一个非Symfony解决方案:

$currentHttpRequest = $this->httpRequest->getCurrentRequest();

$arrParams          = $currentHttpRequest->query->all();
$arrParams          = array_intersect_key($arrParams, array_flip([
    "keepMe1", "keepMe2"
]));

$currentUrlNoQs     = strtok($currentHttpRequest->getUri(), '?');

if( empty($arrParams) ) {

    $canonical          = $currentUrlNoQs;

} else {

    $queryString        = http_build_query($arrParams);
    $canonical          = $currentUrlNoQs . '?' . $queryString;
}

return $canonical;
我不太喜欢它,但它完成了任务

$currentHttpRequest = $this->httpRequest->getCurrentRequest();

$arrParams          = $currentHttpRequest->query->all();
$arrParams          = array_intersect_key($arrParams, array_flip([
    "keepMe1", "keepMe2"
]));

$currentUrlNoQs     = strtok($currentHttpRequest->getUri(), '?');

if( empty($arrParams) ) {

    $canonical          = $currentUrlNoQs;

} else {

    $queryString        = http_build_query($arrParams);
    $canonical          = $currentUrlNoQs . '?' . $queryString;
}

return $canonical;