Uri's in TYPO3 erstellen
In einer Webentwicklung werden URI's oft gebraucht, ob für Links oder Weiterleitungen. In TYPO3 geht das mit wenigen Zeilen Code.
Copy-and-paste Vorlagen
Innerhalb eines ActionControllers
$uri = $this->uriBuilder->reset()->uriFor($actionName = NULL, $controllerArguments = [], $controllerName = NULL, $extensionName = NULL, $pluginName = NULL)->build();
Außerhalb eines ActionControllers
$objectManager = GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager::class);
$uriBuilder = $objectManager->get(\TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder::class);
$uri = $uriBuilder->uriFor($actionName = NULL, $controllerArguments = [], $controllerName = NULL, $extensionName = NULL, $pluginName = NULL)->build();
Erläuterungen
Innerhalb eines ActionControllers steht der UriBuilder als Klasseneigenschaft zur Verfügung. Hier empfehle ich vor der Nutzung immer die reset() - Funktion aufzurufen, damit keine ungewünschten Parameter in die Uri erscheinen. Außerhalb eines ActionControllers muss man die Instanz selbst bilden. Das geht allerdings sehr einfach mit der GeneralUtility - Klasse.
Die Vorraussetzung, damit gültige Uri's erstellt werden können, ist ein gültiger Frontend- oder Backendkontext. Das bedeutet für das Frontend muss die TypoScript Frontend Enviroment (TSFE) korrekt initialisiert sein. Das heisst innerhalb von bspw. Scheduler Tasks oder innerhalb der Middleware ist die TSFE noch nicht initialisiert und damit die Nutzung von dem UriBuilder nicht möglich.
Der UriBuilder hat noch diese weiteren nützlichen Methoden:
- setTargetPageUid()
- setCreateAbsoluteUri()
- setArguments()
Die Nutzung von uriFor ist nicht zwingend notwendig. Für Uri's ohne Relation zu einem Frontend Plugin kann auf diesem Aufruf verzichtet werden.