代码之家  ›  专栏  ›  技术社区  ›  Kenji Baheux

如何设置分层Zend Rest路由?

  •  9
  • Kenji Baheux  · 技术社区  · 16 年前

    使用Zend框架,我尝试在以下模式组织的资源上为REST api构建路由:

    我如何设置Zend_Rest_路线?

      $this->bootstrap('frontController');
      $frontController = Zend_Controller_Front::getInstance();
      $restRoute = new Zend_Rest_Route($frontController);
      $frontController->getRouter()->addRoute('default', $restRoute);
    

    [据我所知,这是一个包罗万象的路线,因此users/324/items/34将导致参数设置为id=324和items=34,所有内容都将映射到用户(前端模块)模型。从那里,我想我可以测试items参数,并在get请求中检索用户的item#34#324。]<==我刚检查过,它似乎不是这样工作的:

    var_dump($this->_getAllParams());
    

    在中,rest控制器的get操作将产生以下输出:

    array(4) {
     ["controller"]=> string(5) "users"
     ["action"]=>  string(3) "get"
     [2]=>  string(5) "items"  ["module"]=>  string(7) "default"]
    }
    

    任何人

    3 回复  |  直到 16 年前
        1
  •  5
  •   Abhinav    16 年前

    $front = $this->getResource('FrontController'); 
    $testRoute = new Zend_Controller_Router_Route(
        'users/:user_id/items/:item_id',
        array(
            'controller' => 'users',
            'action' => 'item',
            'module' => 'default'
        )
    );
    
    $front->getRouter()->addRoute('test', $testRoute);
    

    用户id 或 项目编号

    $user_id = $this->_request->getParam('user_id');
    
        2
  •  6
  •   aporat    13 年前

    我将解决方案开源到github中,并将其作为一个composer包。看见 https://github.com/aporat/Application_Rest_Controller_Route .

    我添加了一个新类,它扩展了Zend_Controller_Router_Route,并添加了添加自定义restful路由的功能,例如

    $frontController = Zend_Controller_Front::getInstance();
    $frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages']));
    
        3
  •  3
  •   Blake Fitzgerald    14 年前

    Zend_Rest_Route仅当存在1个参数时,才会将控制器名称后的第一个参数映射到“id”。

    我提出的最佳解决方案是将Zend_Rest_Route子类化并重写match()函数。复制Zend_Rest_Route的match函数,但在“Digest URI Params”注释之前添加以下内容(中约60行)。

    if($pathElementCount > 1 && $path[0] != 'id') {
        $params['id'] = urldecode($path[0]);
        array_shift($path);
    }  
    

    推荐文章