在Zend Framework中的application.ini中设置路由

时间:2010-12-31 16:57:42

标签: zend-framework routes

我是Zend Framework的新手,我正在尝试解决如何在application.ini文件中添加其他路由。

我目前的路线设置如下:

resources.router.routes.artists.route = /artists/:stub
resources.router.routes.artists.defaults.controller = artists
resources.router.routes.artists.defaults.action = display

...以便 / artists / joe-bloggs 使用“艺术家”控制器的“显示”动作来播放有问题的艺术家的个人资料 - 效果很好。

我现在要做的是设置另一条路线,以便 / artists / joe-bloggs / random-gallery-name 进入“艺术家”控制器的“画廊”动作。

我尝试在application.ini文件中添加一个额外的块(在上面的块下面),如下所示:

resources.router.routes.artists.route = /artists/:stub/:gallery
resources.router.routes.artists.defaults.controller = artists
resources.router.routes.artists.defaults.action = galleries

...但是当我这样做时, / artists / joe-bloggs 的页面不再有效(Zend尝试将其路由到“joe-bloggs”控制器)。

如何在application.ini中设置路由,以便根据“/:gallery”是否存在来更改“艺术家”控制器的操作?

我意识到我可能犯了一个非常愚蠢的错误,所以请指出我的愚蠢并让我走上正确的道路(没有任何双关语)。

3 个答案:

答案 0 :(得分:4)

尝试颠倒路线的顺序。 ZF按照添加的相反顺序匹配路由(以便默认路由是最后匹配的路径)

如果这不起作用,您可能必须使用可选组件调查正则表达式路由。

答案 1 :(得分:3)

您的第二个区块需要有不同的路线名称,将“艺术家”字词重命名为与您的新区块类似的字样:

resources.router.routes.artists-gal.route = /artists/:stub/:gallery
resources.router.routes.artists-gal.defaults.controller = artists
resources.router.routes.artists-gal.defaults.action = galleries

答案 2 :(得分:1)

我通常在application / Bootstrap.php(或者你的Bootstrap.php文件所在的位置)设置路由

添加如下方法:

protected function _initRoutes()
{
    $ctrl = Zend_Controller_Front::getInstance();
    $router = $ctrl->getRouter();
    $router->addRoute(
            'artist_detail',
            new Zend_Controller_Router_Route('artists/:stub',
                                            array('controller' => 'artists',
                                                  'action' => 'display'))
    ); 

    $router->addRoute(
            'artist_detail_gallery',
            new Zend_Controller_Router_Route('artists/:stub/:gallery',
                                            array('controller' => 'artists',
                                                  'action' => 'gallery'))
    );



}

就检查天气而言,特定艺术家有一个画廊,就我的例子而言,我会在ArtistsController中有一个galleryAction方法

检查“&stub”存根是否存在图库。请求参数,如果它没有扔404:

throw new Zend_Controller_Action_Exception("Object does not exist", 404);

或将它们重定向到其他页面:

return $this->_helper->redirector('index', 'index'); //redirect to index action of index controller

希望这有帮助。