TYPO3 Plugin:

extbase_router

Diese Erweiterung ermöglicht die Registrierung von Endpunkten ohne Seiten oder Plugins im TYPO3 Backend

Dazu greift die Extension in den TYPO3-Bootstrap-Prozess ein - an einem Punkt, an dem der FrontendUser initialisiert wird, aber bevor versucht wird, eine aktuelle Seite aufzulösen. Die angeforderte URL wird dann mit allen registrierten Routen abgeglichen, und falls eine Übereinstimmung gefunden wird, wird die Anfrage abgefangen und an die angegebene Steuerungsaktion umgeleitet.

Eine Seite, die normalerweise mit /example aufgerufen wird, kann nie aufgerufen werden, wenn eine Route registriert wurde, die mit /example übereinstimmt! Routen werden nicht automatisch gestaffelt oder namensgesteuert und Sie sollten daher sorgfältig darüber nachdenken, welche Auswirkungen Ihre Routen haben können!

Verwendung

Um Routen registriert zu haben, bevor ein Abgleich stattfindet, sollte die Routenkonfiguration in der ext_localconf.php Ihrer Erweiterung erfolgen.

/** 
 * @var \Ondigo\ExtbaseRouter\Routing\Routing\Router $Router 
 */
$router = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\Ondigo\ExtbaseRouter\Routing\Routing\Router::class);

$router->get('/api/resource', \Vendor\Extension\Controller\ResourceController\ResourceController::class, 'list');

Alle Anfragen, die mit /api/resource mit der HTTP-Methode GET übereinstimmen, werden dann direkt an ResourceController->listAction weitergeleitet

Im Moment ist Ihre Steuerung verpflichtet, die entsprechenden Header einzustellen und alle Daten auszugeben. Dieser Router tut nichts anderes, als den durch TYPO3 verursachten Overhead beim Rendern eines einzelnen Plugins zu eliminieren, bei dem das normale Seitenlayout nicht benötigt wird.

Konfiguration

Die einzige notwendige Konfiguration ist, wenn Sie mehrere Sprachen für API-Endpunkte bereitstellen möchten. Diese Einstellungen werden systemweit vorgenommen und können nicht von einer anderen Erweiterung übernommen werden.

Um die unterstützten Sprachen zu konfigurieren, verwenden Sie den TYPO3 Extension Manager und stellen Sie die entsprechenden Werte für die Extbase Router Erweiterung ein:

Kopfzeile der Akzeptanzsprache

standard: X-Accept-Sprache

Mit dieser Option können Sie festlegen, welches Header-Feld verwendet wird, um eine bestimmte Sprache anzufordern. Wenn Sie eine Anfrage stellen, sollte der Wert dieses Feldes einer der im Feld Unterstützte Sprachen definierten languageKeys sein

Unterstützte Sprachen

Dies sollte eine kommagetrennte Liste von LanguageKey=LanguageUid-Mappings sein. Zum Beispiel "de=0,en=2".

API

get($url, $controller, $action, $parameterSettings)
post($url, $controller, $action, $parameterSettings)
put($url, $controller, $action, $parameterSettings)
patch($url, $controller, $action, $parameterSettings)
delete($url, $controller, $action, $parameterSettings)
any($url, $controller, $action, $parameterSettings)

alle oben genannten Methoden sind kettenfähig, um eine einfache Bestellung und Gruppierung von Routen zu ermöglichen.

Parameter angeben

Es ist möglich, benannte Parameter in einer solchen Route anzugeben:

$router->get('/api/resource/:resourceId', \Vendor\ExtensionName\Controller\ResourceController::class, 'get')

wobei :resourceId den variablen Teil der URL angibt.

Benannte Parameter werden durch ein Doppelpunkt : am Anfang erkannt. Um den Parameter an die aufgerufene Aktion zu übergeben, müssen die Parameternamen übereinstimmen!

/**
 * @param int $resourceId
 */
öffentliche Funktion getAction($resourceId) {
    ...
}

Die Übergabe von $parameterSettings bei der Registrierung einer neuen Route ermöglicht die Angabe verschiedener Muster für den Abgleich. Standardmäßig wird jeder benannte Parameter mit [a-zA-Z_\-0-9]+ verglichen.

$router->get('/api/resource/:resourceId', $controller, $action, [
    resourceId' => Router::PATTERN_INTEGER
]);

Muster zur Übereinstimmung von Ganzzahl- und UUID-Werten sind als Konstanten verfügbar, andere Muster können als jede Gruppe zur Erfassung von regulären Ausdrücken übergeben werden. ([0-9]+x[0-9]+x[0-9]+) kann beispielsweise verwendet werden, um Werte wie 200x200 anzupassen.

Benötigen Sie schnelle Hilfe mit dieser Extension? Unser Team von erfahrenen TYPO3-Entwicklern löst Probleme unkompliziert und zum Stundensatz.