5.3. Einfache Routen

Das Herz des RewriteRouter ist die Definition der benutzerdefinierten Routen. Routen werden durch Aufruf der addRoute Methode des RewriteRouter erstellt:

$router->addRoute('user', 'user/:username');

Der erste Parameter ist der Name der Route. Zum derzeitigen Zeitpunkt ist er redundant aber wird in Zukunft in einem URL View Helper verwendet, um eine einfache Erstellung von URLs in deinen Views zu ermöglichen. Wenn du die vorher konfigurierte, benannte Route verwenden möchtest, kannst du sie mit den getRoute Methode des RewriteRouter erhalten.

Der zweite Parameter ist eine Route, die auf eine URL passt - zum Beispiel passt die obige Route auf http://example.com/user/martel. Der Doppelpunkt in einer Route markiert eine URL Variable, die durch die Zend_Controller_Action::_getParam Methode zugänglich ist. In unserem Beispiel wird der mit 'username' benannte Parameter auf den Wert 'martel' gesetzt.

[Anmerkung] Anmerkung
Routes werden in umgekehrter Reihenfolge abgeglichen, so dass du sicherstellen musst, dass die allgemeinste Route als erstes definiert ist.
[Anmerkung] Anmerkung
Fürs Erste erlaubt die aktuelle Implementation die Verwendung jedes Zeichens für den Variablenbezeichner außer den Schrägstrich (/), es wird aber sehr empfohlen, dass du nur Zeichen verwendest, die für PHP Variablen verwendet werden dürfen. In Zukunft wird die Implementation vermutlich angepasst und dies könnte Fehler in deinen Code einführen.

Es gibt zwei besondere Variablen, die in deinen Routen verwendet werden können - 'controller' und 'action'. Diese besonderen Variablen werden verwendet, um einen gewählten Controller und/oder eine Aktion in der URL zu finden. Die 'action' Variable muß immer entweder in der Route oder als Standardparameter definiert sein. Die 'controller' Variable wird stanardmäßig auf IndexController verweisen, wenn sie nicht definiert wurde.

$router->addRoute('user', ':controller/:action');

Wenn du deinen Browser mit dieser Route auf http://example.com/news/latest richtest, wird der Zend_Controller_Dispatcher die Aktion latestAction deines Controllers NewsController ausführen.