假设我有一个URI为
的页面 http://mydomain.loc/index.php?id=123&by=name&dir=desc
并且需要添加/更新/删除一些其他参数(让我们将其命名为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
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 TYPO3CMSExtbaseMvcWebRoutingUriBuilder the current UriBuilder to allow method chaining
* @api
* @see TSref/typolink.addQueryString
*/
public function setAddQueryString($addQueryString) {
$this->addQueryString = (boolean) $addQueryString;
return $this;
}