【问题标题】:Setting routes in application.ini in Zend Framework在 Zend Framework 的 application.ini 中设置路由
【发布时间】:2010-12-31 16:57:42
【问题描述】:

我是 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”是否存在来更改“艺术家”控制器的操作?

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

【问题讨论】:

    标签: zend-framework routes


    【解决方案1】:

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

    如果这不起作用,您可能需要研究带有可选组件的正则表达式路由。

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        【解决方案3】:

        我通常在 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 方法

        检查“存根”请求参数的库是否存在,如果它没有抛出 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
        

        希望这会有所帮助。

        【讨论】:

        • 我更喜欢这个作为路由的解决方案,它比把它放在 application.ini 中更详细和更容易理解
        • @jolyonruss 另一方面我没有
        猜你喜欢
        • 1970-01-01
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多