Httprequest 从Symfony 4.4 HttpFoundation\Request中删除参数并重新生成URL
我需要重新生成页面的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
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;