Zend_Router без ключа - PullRequest
       29

Zend_Router без ключа

0 голосов
/ 30 октября 2010

У меня вопрос по поводу 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 - это paramkey, а 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 Ответ

2 голосов
/ 30 октября 2010

Вы можете использовать собственный маршрут для этого:

$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'))
);
...