Zend_Router省略了param-key

时间:2010-10-30 08:45:08

标签: php zend-framework url router zend-controller-router

考虑到Zend_Controller_Router,我有一个问题。我在我的应用程序中使用了模块化结构。该应用程序基于Zend-Framework构建。正常的路线是这样的:

/modulename/actionname/

由于我总是在我的模块中使用IndexController,因此没有必要在url中提供它。现在我可以像这样添加params:

/modulename/actionname/paramkey/paramvalue/paramkey/paramvalue

我认为这在ZF中是正常的。但在某些情况下,我不想在网址中提供一个paramkey。例如,我希望在网址中显示博客标题。当然这是针对SEO的:

/blog/show/id/6/this-is-the-blog-title

在这种情况下,blog是模块,show是操作。 id是一个参数,6是我要展示的博客帖子的ID。 this-is-the-blog-title当然是标识为6的博客标题的标题。问题是,如果我像这样使用路由器的assemble() - 方法:

assemble(array('module' =>'blog',
               'action' => 'show', 
               'id' => $row['blog_id'],
               $row['blog_headline_de'] . '.html'));

网址结果为:

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,但最后我得到了斜杠。

您是否有任何解决方案可以获取没有0作为关键且没有结尾斜线的网址?

此致 亚历

1 个答案:

答案 0 :(得分:2)

您可能希望为此使用自定义路线:

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