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'))
);
Другие вопросы по тегам