Http::buildUri() 

\nn\t3::Http()->buildUri($pageUid, $vars = [], $absolute = false); 

Build URI, works in frontend and backend context. Takes realURL into account

\nn\t3::Http()->buildUri( 123 );
\nn\t3::Http()->buildUri( 123, ['test'=>1], true );
Copied!

| @return string

Source Code 

public function buildUri ( $pageUid, $vars = [], $absolute = false )
{
	// Keine pid übergeben? Dann selbst ermitteln zu aktueller Seite
	if (!$pageUid) $pageUid = \nn\t3::Page()->getPid();
	// String statt pid übergeben? Dann Request per PHP bauen
	if (!is_numeric($pageUid)) {
		// relativer Pfad übergeben z.B. `/link/zu/seite`
		if (strpos($pageUid, 'http') === false) {
			$pageUid = \nn\t3::Environment()->getBaseURL() . ltrim( $pageUid, '/' );
		}
		$parsedUrl = parse_url($pageUid);
		parse_str($parsedUrl['query'] ?? '', $parsedParams);
		if (!$parsedParams) $parsedParams = [];
		ArrayUtility::mergeRecursiveWithOverrule( $parsedParams, $vars );
		$reqStr = $parsedParams ? http_build_query( $parsedParams ) : false;
		$path = $parsedUrl['path'] ?: '/';
		$port = $parsedUrl['port'] ?? false;
		if ($port) $port = ":{$port}";
		return "{$parsedUrl['scheme']}://{$parsedUrl['host']}{$port}{$path}" . ($reqStr ? '?'.$reqStr : '');
	}
	// Frontend initialisieren, falls nicht vorhanden
	if (!\nn\t3::Environment()->isFrontend()) {
		\nn\t3::Tsfe()->get();
	}
	$request = $GLOBALS['TYPO3_REQUEST'] ?? new \TYPO3\CMS\Core\Http\ServerRequest();
	$cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
	$cObj->setRequest( $request );
	$uri = $cObj->typolink_URL([
		'parameter' => $pageUid,
		'linkAccessRestrictedPages' => 1,
		'additionalParams' => GeneralUtility::implodeArrayForUrl('', $vars),
	]);
	// setAbsoluteUri( TRUE ) geht nicht immer...
	if ($absolute) {
		$uri = GeneralUtility::locationHeaderUrl($uri);
	}
	return $uri;
}
Copied!