Route-Parser¶
Die Klasse RouteParser
analysiert einfache Textdateien mit der Dateierweiterung .route
. Der Aufbau der Datei
ist sehr einfach gehalten. Es gibt neben Kommentaren und Leerzeilen zwei unterschiedliche Arten von Zeilen.
Route¶
Jede Zeile in der Datei definiert eine Route. Die Zeile gliedert sich in Spalten, die durch Leerzeichen getrennt werden. Die einzelnen Spalten haben dabei folgende Bedeutung:
- Die HTTP Methode der Route oder ANY für alle Methoden
- Ein Regex zum Prüfen der URL
- Der Klassenname des Presenters
- Die ID des Route-Objekts (Erlaubte Zeichen sind A-Z, 0-9, -)
- Optionale Parameter in der Form key1=value,key2=value,key3="va lue"
Statische Pfade¶
Bei statischen Pfaden ist eine fest definierte Zeichenkette ohne regulären Ausdruck definiert. Außerdem ist diese Route
auch noch über die ID aufrufbar. http://localhost/page/lists
ist in diesem Fall also
gleichbedeutend mit http://localhost/550e8400-e29b-11d4-a716-446655440002
.
GET /page/lists \Application\App\Web\Page 550e8400-e29b-11d4-a716-446655440002
Pfade mit dynamischen Teilen¶
Bei Pfaden mit dynamischen Teilen kann entweder ein fester Wert, ein Wildcard oder ein regulärer Ausdruck für den dynamischen Teil verwendet werden. Der dynamische Teil muss dabei immer in geschweiften Klammern notiert werden.
GET /page/{id} \Application\App\Web\Page 550e8400-e29b-11d4-a716-446655440000
GET /page/{id}/sub/{[a-z]+name} \Application\App\Web\Page 550e8400-e29b-11d4-a716-446655440001
Beispiele¶
# Das ist ein Kommenatar
# Dieser Eintrag trifft bei einer GET-Anfrage mit der URL /page/home zu und ruft
# den Presenter \Application\App\Web\Page auf. Dem Presenter wird der Parameter id=home mitgegeben.
GET /page/home \Application\App\Web\Page 550e8400-e29b-11d4-a716-446655440000 id:'home'
# Dieser Route trifft bei allen URL mit /page und einer Zahl zu, also /page/0, page/1, etc.
GET /page/[0-9]+ \Application\App\Web\Page 550e8400-e29b-11d4-a716-446655440001
# Ein Beispiel für einen POST-Request
POST /page/{id} \Application\App\Web\Page 550e8400-e29b-11d4-a716-446655440002 name:'neue Seite'
Die ID der Route ist wichtig, da es immer nur eine Route mit einer ID geben kann.
Hinweis
Routen mit identischer ID überschreiben bereits definierte Routen.
Includes¶
Über das Schlüsselwort INCLUDE
wird eine andere Route an dieser Stelle eingebunden.
Der Aufbau der Spalten ist folgendemassen:
- INCLUDE
- externe Routingtabelle / Verzeichnis
- optionale Eigenschaftsdatei
Als externe Routingtabelle kann jede Form, für die es einen Parser gibt eingebunden werden.
Wird als zweiter Parameter ein Verzeichnis definiert, so wird der dritte optionale Parameter nicht ausgewertet.
Hier einige Beispiele
# Einbinden einer anderen Routingtabelle
INCLUDE routing-01.route
# Einbinden einer XML-Routingtabellen
INCLUDE routing-02.xml
# Einbinden anderer Routingtabellen aus einem Verzeichnis
INCLUDE my/directory
# Einbinden einer XML-Routingtabellen mit Eigenschaftsdatei
INCLUDE routing-03.xml data.properties
# Einbinden einer Route aus einem Phar-Archive
# Das Phar-Archive muss aber bereits in PHP eingebunden worden sein.
INCLUDE phar://myphar.phar/config/route/my.xml
Bei der Einbindung einer XML-Routingtabelle besteht die Möglichkeit eine Eigenschaftsdatei zu übergeben. Dadurch kann eine XML-Datei für mehrere Routen verwendet werden.
Wurde zum Beispiel eine XML-Routingtabelle definiert, in der sich nur die Route und die ID ändert, so wird die XML-Datei mehrfach eingebunden und in der Eigenschaftsdatei die Werte definiert.
route.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definition>
<routes>
<group>
<route id="%{id}">
<presenter>%{presenter}</presenter>
<method>%{method}</method>
<pattern><![CDATA[%{route}]]></pattern>
<configuration>
...
01.properties
id=route1
presenter=MyPresenter
method=GET
route=/home/
02.properties
id=route2
presenter=MyPresenter
method=POST
route=/contact/
my-route.route
INCLUDE route.xml 01.properties
INCLUDE route.xml 02.properties
Das Ergebnis sind zwei Routen mit der ID route1
und route2
, die beide über die gleiche
XML definiert wurden.