假设我有一个带URI的页面:
http://mydomain.loc/index.php?id=123&by=name&dir=desc
并且需要添加/更新/删除其他一些param(让我们将它命名为 offset ),所以它毕竟是:
http://mydomain.loc/index.php?id=123&by=name&dir=desc&offset=321
不幸的是,在构建uriBuilder
这样的新链接时
$uriBuilder = $this->uriBuilder;
$uri = $uriBuilder->setArguments(array('offset' => 321))->build();
我只获得index.php?id=123&offset=321
(没有by
和dir
参数......)
如何强制uriBuilder
保留这些参数? (由GeneralUtility::_GP(*)
手动重写参数是不可能的,因为它们理论上未知)
同样$_GET
数组并不好,因为我正在使用RealURL
答案 0 :(得分:4)
uriBuilder有一个setAddQueryString
方法,可以完全按照您的要求进行操作。它将当前查询字符串合并到参数中:
$uri = $this->uriBuilder->setArguments(array('offset' => 321))->setAddQueryString(TRUE)->build();
这里的参考是从TYPO3核心的实际类中复制的方法:
/**
* If set, the current query parameters will be merged with $this->arguments. Defaults to FALSE.
*
* @param boolean $addQueryString
* @return \TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder the current UriBuilder to allow method chaining
* @api
* @see TSref/typolink.addQueryString
*/
public function setAddQueryString($addQueryString) {
$this->addQueryString = (boolean) $addQueryString;
return $this;
}