Routing in i-doit#
In diesem Artikel wird darauf eingegangen, wie das i-doit-interne routing funktioniert und wir damit eine eigene GUI realisieren können.
URL-Routing (Symfony Routing)#
Seit i-doit 25 kann die Symfony Routing Komponente genutzt werden um eigene Endpunkte zu realisieren. Dazu müssen die Routen in der Add-on Modul-Klasse registriert werden. Dazu muss das idoit\AddOn\RoutingAwareInterface
Interface genutzt werden.
Durch Interface muss die Methode public static function registerRouting(): void
hinzugefügt werden. Innerhalb dieser Methode können die Routen mittels PHP
oder YAML
Datei registriert werden:
PHP Beispiel#
Um eine eigene Collection mit Hilfe von PHP Code zu registrieren benötigt man die addCollection
Methode des 'routes'
Service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Die routes.php
kann dabei folgendermaßen aussehen:
1 2 3 4 5 6 7 8 |
|
Mit diesem Code wird die route /example/php-route
unter dem Namen example.php
registriert. Beim aufruf dieser URL wird der Controller ExampleController
instanziiert und dessen Methode index
aufgerufen.
YAML Beispiel#
Um eine eigene Collection mit Hilfe einer YAML Datei zu registrieren benötigt man die addCollection
Methode des 'routes'
Service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Die routes.yaml
kann dabei folgendermaßen aussehen:
1 2 3 4 |
|
Mit diesem Code wird die route /example/yaml-route
unter dem Namen example.yaml
registriert. Beim aufruf dieser URL wird der Controller ExampleController
instanziiert und dessen Methode index
aufgerufen.
URL-Routen generieren#
Es ist möglich URLs auf Basis von Routen zu generieren. Das kann nützlich sein, wenn sich eine URL ändern soll - anstatt sämtliche Stellen von Hand zu ändern kann man diesen Code nutzen um die URL auf Basis der Route zu erstellen:
1 2 3 4 |
|
Die generate
Methode kann als zweiten Parameter auch Parameter übergeben bekommen, sofern die Route solche beinhaltet.
Controller Code#
Die Symfony Routing Komponente arbeitet mit zwei Klasse Request
und Response
. Die Instanz der Request
Klasse wird an die Controller Methode übergeben damit diese wiederum eine Response
Instanz zurückliefert.
Es gibt (im Vergleich zur alten Logik) keine weiteren Abhängigkeiten zu anderen Klassen und/oder Schnittstellen.
Die Response
Objekte#
Die aufgerufenen Controller Methoden müssen immer eine Response
Instanz zurückliefern damit sie verarbeitet werden können. Dazu gibt es eine Reihe von verschiedenen Response
Klassen, die genutzt werden können:
Die normale Response
Klasse#
Diese Klasse kann für spezifische Inhalte genutzt werden, die ggf. spezielle content-type
Angaben oder Response Codes benötigen.
1 2 3 4 5 |
|
Für JSON JsonResponse
#
Die JsonResponse
Klasse kann genutzt werden um Daten im JSON Format an das Frontend zurückzuliefern. Die Klasse wird dabei den korrekten content-type
setzen und die Umwandlung zum JSON String übernehmen. Diese Klasse eignet sich vor allem für Antworten von Ajax Anfragen, die im Frontend weiterverwendet werden können.
1 |
|
Die i-doit eigene IdoitReponse
#
Um die i-doit Oberfläche darzustellen kann die IdoitResponse
genutzt werden, diese beinhaltet alle notwendigen Logiken zum darstellen von eigenen Inhalten und einem Navigationsbaum. Es gibt auch ein paar "Convenience" Methoden die von Entwicklern genutzt werden können um bestimmte Verhalten zu forcieren:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|