Weiterleitungen in Extbase
Weiterleitungen sind ein essentielles Thema in der Webentwicklung. In Extbase das mit wenigen Zeilen Code erreichen.
Copy-and-paste Vorlagen
Inside ActionController
$this->redirect($actionName, $controllerName = NULL, $extensionName = NULL, array $arguments = NULL, $pageUid = NULL, $delay = 0, $statusCode = 303)
$this->redirectToURI($uri, $delay = 0, $statusCode = 303)
$this->forward($actionName, $controllerName = NULL, $extensionName = NULL,array $arguments = NULL)
Outside ActionController
use TYPO3\CMS\Core\Utility\HttpUtility;
HttpUtility::redirect($url, $httpStatus);
Die Uri kann mit dem UriBuilder erstellt werden:
$objectManager = GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager\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)->builder();
Erklärungen
Innerhalb eines ActionControllers ist die Weiterleitung problemlos mit den Klassenmethoden: redirect und forward möglich. Der Unterschied von forward zu redirect ist, dass sich bei einem Forward die URL nicht ändert.
Außerhalb eines Controllers sollte man eine Weiterleitung mittels der HttpUtility umsetzen. Dort gibt es dann die statische Funktion: redirect. Um eine valide Uri zu erhalten nutzt man am besten den UriBuilder. Falls die Zielseite nicht die aktuelle ist, dann kann man die Methode: setTargetPageUid($pageUid) vom UriBuilder nutzen. Falls man nur auf einer Seite weiterleiten möchte ohne ein Plugin mit Controller->action Kombination erreichen möchte, dann kann man uriFor auslassen und nur setTargetPageUid nutzen.