Zend_Router Weglassen param-Schlüssel
-
27-09-2019 - |
Frage
Ich habe eine Frage unter Berücksichtigung Zend_Controller_Router bekommt. Ich verwende eine modular-Struktur in meiner Anwendung. Die Anwendung basiert auf Zend-Framework integriert. Die normalen Routen sind wie folgt:
/modulename/actionname/
Da ich immer einen Indexcontroller innerhalb meiner Module verwenden, ist es nicht notwendig, es in der URL zu liefern. Nun ich in der Lage bin append params wie folgt aus:
/modulename/actionname/paramkey/paramvalue/paramkey/paramvalue
So ist das normal in ZF ist, denke ich. Aber in einigen Fällen mag ich nicht eine paramKey innerhalb der URL zur Verfügung zu stellen. Zum Beispiel möchte ich ein Blog-Titel in der URL angezeigt werden. Natürlich ist dies für SEO bestimmt:
/blog/show/id/6/this-is-the-blog-title
In diesem Fall ist blog
das Modul, show
die Aktion. id
ist ein paramKey und 6
ist die ID des Blogpost ich zeigen wollen. this-is-the-blog-title
ist natürlich die Schlagzeile des Blogpost mit der ID 6
. Das Problem ist, dass, wenn ich verwende die assemble()
-Methode des Routers wie folgt aus:
assemble(array('module' =>'blog',
'action' => 'show',
'id' => $row['blog_id'],
$row['blog_headline_de'] . '.html'));
die URL ergibt:
blog/show/id/6/0/this-is-the-blog-title.html
Wie Sie ein 0
als Schlüssel eingeführt sehen. Aber ich will diese 0 weggelassen werden. Ich habe versucht, dies durch die Blogtitle als Schlüssel verwendet wird, wie folgt aus:
assemble(array('module' =>'blog',
'action' => 'show',
'id' => $row['blog_id'],
$row['blog_headline_de'] . '.html' => ''));
Dies führt zu:
blog/show/id/6/this-is-the-blog-title.html/
Nun ist die 0
weggelassen, aber ich habe den Schrägstrich am Ende bekommt.
Haben Sie eine Lösung haben eine URL ohne 0
als Schlüssel und ohne abschließenden Schrägstrich zu bekommen?
Viele Grüße, Alex
Lösung
Vielleicht möchten Sie eine benutzerdefinierte Route verwenden, für diese:
$router->addRoute(
'blogentry',
new Zend_Controller_Router_Route('blog/show/:id/:title',
array('controller' => 'index', 'module' => 'blog'
'action' => 'info'))
);
Und rufen Sie montieren mit der Route als zweiten Parameter. Sehen Sie sich die Zend_Controller_Router_Route Abschnitt der Dokumentation für weitere Einzelheiten (sie sogar Sie Beispiele mit montieren ).
oder in allgemeinerer Art und Weise:
$router->addRoute(
'generalseo',
new Zend_Controller_Router_Route(':module/:action/:id/:title',
array('controller' => 'index'))
);