Zend_Router без ключа
У меня вопрос по поводу Zend_Controller_Router. Я использую модульную структуру в своем приложении. Приложение построено на Zend-Framework. Обычные маршруты такие:
/modulename/actionname/
Поскольку в моих модулях я всегда использую IndexController, указывать его в URL не обязательно. Теперь я могу добавлять параметры следующим образом:
/modulename/actionname/paramkey/paramvalue/paramkey/paramvalue
Так что это нормально в ZF, я думаю. Но в некоторых случаях я не хочу предоставлять paramkey в URL. Например, я хочу, чтобы заголовок блога отображался в URL. Конечно это предназначено для SEO:
/blog/show/id/6/this-is-the-blog-title
В этом случае, blog
это модуль, show
это действие. id
это парамейка и 6
это идентификатор поста, который я хочу показать. this-is-the-blog-title
это, конечно, заголовок поста с идентификатором 6
, Проблема в том, что если я использую assemble()
-метод роутера такой:
assemble(array('module' =>'blog',
'action' => 'show',
'id' => $row['blog_id'],
$row['blog_headline_de'] . '.html'));
URL приводит к:
blog/show/id/6/0/this-is-the-blog-title.html
Как вы можете видеть 0
вставляется как ключ. Но я хочу, чтобы этот 0 был опущен. Я попробовал это, используя blogtitle в качестве ключа, вот так:
assemble(array('module' =>'blog',
'action' => 'show',
'id' => $row['blog_id'],
$row['blog_headline_de'] . '.html' => ''));
Это приводит к:
blog/show/id/6/this-is-the-blog-title.html/
Теперь 0
опущен, но у меня есть косая черта в конце.
У вас есть какое-либо решение, чтобы получить URL без 0
как ключ и без косой черты?
С уважением, Алекс
1 ответ
Вы можете использовать собственный маршрут для этого:
$router->addRoute(
'blogentry',
new Zend_Controller_Router_Route('blog/show/:id/:title',
array('controller' => 'index', 'module' => 'blog'
'action' => 'info'))
);
И назовите вашу сборку с маршрутом в качестве второго параметра. См. Раздел документации Zend_Controller_Router_Route для получения более подробной информации (они даже предоставляют примеры со сборкой).
Или в более общем виде:
$router->addRoute(
'generalseo',
new Zend_Controller_Router_Route(':module/:action/:id/:title',
array('controller' => 'index'))
);