Template::renderHtml() 

\nn\t3::Template()->renderHtml($html = NULL, $vars = [], $templatePaths = [], $request = NULL); 

Render simple fluid code via standalone renderer

\nn\t3::Template()->renderHtml( '{_all->f:debug()} Test: {test}', $vars );
\nn\t3::Template()->renderHtml( ['Name: {name}', 'Test: {test}'], $vars );
\nn\t3::Template()->renderHtml( ['name'=>'{firstname} {lastname}', 'test'=>'{test}'], $vars );
Copied!

Since TYPO3 12, the $request must also be passed when calling from a controller:

\nn\t3::Template()->renderHtml( 'templatename', $vars, $templatePaths, $this->request );
Copied!

| @return string

Source Code 

public function renderHtml ( $html = null, $vars = [], $templatePaths = [], $request = null) {
	$returnArray = is_array($html);
	if (!$returnArray) $html = [$html];
	$view = \nn\t3::injectClass(StandaloneView::class);
	// @todo: Prüfen, of das geht?
	if (!$request) {
		//$request = $GLOBALS['TYPO3_REQUEST'] ?? false;
	}
	if ($request) {
		$view->setRequest( $request);
	}
	if ($templatePaths) {
		$this->setTemplatePaths( $view, $templatePaths );
		$this->removeControllerPath( $view );
	}
	if (is_array($vars)) {
		$view->assignMultiple( $vars );
	}
	foreach ($html as $k=>$v) {
		if (is_string($v) && trim($v)) {
			// ersetzt maskierte Viewhelper wie `{test->f:debug()}` mit `{test->f:debug()}`
			$v = preg_replace('/{([^}]*)(->|→)([^}]*)}/', '{$1->$3}', $v);
			$view->setTemplateSource( $v );
			$html[$k] = $view->render();
		} else {
			$html[$k] = $v;
		}
	}
	return $returnArray ? $html : $html[0];
}
Copied!