Wie erstelle ich eigene URLs um zum Beispiel eine Variable übergeben zu können?
Um eigene Router zu implementieren, öffnen wir als erstes die index.php aus dem “public”-Ordner.
Hier schreiben wir nun, nach dem wir die Application erstellt, die Bootstrap geladen und ausgeführt haben, folgende Zeile um einen neuen Rewrite-Router zu erstellen:
$router = new Zend_Controller_Router_Rewrite();
Als nächstes möchten wir einen eigenen Router anlegen. Wir nehmen nun mal an, dass wir einen NachrichtenController haben, sowie eine lesenAction. An diese Action möchten wir nun über die URL die ID mitgeben. Als Name für den Router verwenden wir “nachrichtlesen”:
$router->addRoute('nachrichtlesen');
Hier würde Zend noch meckern, da er eine Klasse des Typs Zend_Controller_Router_Route erwartet. In diesen Klassen-Aufruf schreiben wir, wie die URL aussehen soll, dass eine ID übergeben werden soll und welcher Controller / welche Action verwendet werden soll:
$router->addRoute(
'nachrichtlesen',
new Zend_Controller_Router_Route('nachrichten/lesen/:id',
array('controller' => 'nachrichten',
'action' => 'lesen'))
);
Zur Erklärung:
“nachrichten/lesen/” ist die URL, wie sie später aussehen wird (http://beispiel.de/nachrichten/lesen/).
:id ist ein Parameter, der Übergeben wird.
Das Array enthält die Bestimmung, welcher Controller (nachrichten) / welche Action (lesen) verwendet werden soll.
Jetzt noch die Routen an die Application übergeben:
$ctrl = Zend_Controller_Front::getInstance();
$ctrl->setRouter($router);
In einer unsere Views erstellen wir nun ganz einfach eine URL mithilfe des URL-Helpers, welcher auf diese Route zugreift:
$this->url(array('id' => '3'), 'nachrichtlesen', true);
Dies ergibt folgende Ausgabe:
http://beispiel.de/nachrichten/lesen/3
Im NachrichtenController & der lesenAction können wir dies nun wie gewohnt über die Request-Methode verarbeiten:
$id = $this->getRequest()->getParam('id');

Hy
habe das versucht und quäli mich schon seit 4h mit den blöden routern rum.
Leider bekomme ich es nicht hin. lediglich so:
module/controller/action/param1/value1/param2/value2….
ein tipp wäre hilfreich
bekomme dann folgende fehler
**********************************************
Folgender Fehler ist aufgetreten:
id is not specified
************************************************
Hallo Florian,
im Controller wird der parameter id spezifisiert. Um z.B. param1 zu spezifizieren, musst du ledigleich :param1 an die URL hängen, also folgendermaßen:
$router->addRoute(
‘nameDesRouters’,
new Zend_Controller_Router_Route(‘deinModul/deinController/deineAction/:param1/:param2′,
array(‘controller’ => ‘nachrichten’,
‘action’ => ‘lesen’))
);
Den URL-Helper wendest du dann also so an:
$this->url(array(‘param1′ => ‘value1′, ‘param2′ => ‘value2′), ‘nameDesRouters’, true);
In der Action die Parameter ganz normal über den Request-Helper auslesen.
Hoffe, das hilft dir weiter.
Lg
Ja sowas habe ich schonmal versucht, leider erkennt er die parameter nicht.
würde das gern auch dynamisch haben, quasi das egal welcher
:module
:controller
aber dafür die “change” oder “show” als erster weiterer ein parameter kommt.
quasi immer die “ID”
haste da eine idee?
Will nicht für jede Action mir eine route schreiben.. da es ziemlich viele werden..
Das einzige was mir dies bezüglich einfällt ist, den ‘default’-Router zu überschreiben mit den jeweiligen Parametern.
Aber ich weiß nicht, ob das wirklich Funktioniert. Was anderes fällt mir nicht ein.
lg