-1

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

https://example.com/bao1/bao2/?removeMe1=anything&keepMe1=anything&removeMe2=&keepMe2=anything

我只想展示这个:

https://example.com/bao1/bao2/?keepMe1=anything&keepMe2=anything

我自动装配了请求(我喜欢自动装配):

    public function __construct(RequestStack $httpRequest)
    {
        $this->httpRequest                  = $httpRequest;
    }

然后我像这样玩:

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()但我找不到任何东西。

4

1 回答 1

0

我必须完成这项工作,所以我设计了一个非 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;

我不太喜欢它,但它完成了工作。

于 2020-07-22T16:04:32.663 回答