【问题标题】:Adding custom route to Zend REST controller将自定义路由添加到 Zend REST 控制器
【发布时间】:2015-12-22 00:45:30
【问题描述】:

我正在使用 Zend F/W 1.12 来构建一个 REST 服务器。 我的要求之一是有一个超出 Zend 可以识别为“Restfull”动作边界的动作。我的意思是,我想要一个名为 mymedia 之类的操作,并希望路由定向到 //mymedia 的请求。目前,Zend 将其理解为 getAction 的 id,当然这不是我想要的。

任何帮助将不胜感激! 谢谢

【问题讨论】:

    标签: api rest zend-framework routes


    【解决方案1】:

    Zend_Rest_Route 的实现不允许进行太多自定义,而是为开箱即用的使用提供了基本的路由方案。

    因此,如果您需要更改 URI 的解释方式,您可以扩展 Zend_Rest_RouteZend_Controller_Router_Route_ModuleZend_Controller_Router_Route_Abstract 类来创建自己的路由类型。

    查看这些类的 match 方法以及它们的作用 - 例如它们填充$_values 属性数组(同时尊重$_moduleKey$_controllerKey$_actionKey 属性)。

    然后您可以添加它,例如作为引导类中的第一条路线:

    $frontController = Zend_Controller_Front::getInstance();
    $router = $frontController->getRouter();
    $router->addRoute('myRoute', new My_Route($frontController));
    $router->addRoute('restRoute', new Zend_Rest_Route($frontController));
    

    见:

    http://framework.zend.com/manual/1.12/en/zend.controller.router.html#zend.controller.router.basic

    路由是遍历所有提供的路由并将其定义与当前请求 URI 匹配的简单过程。当找到正匹配时,从 Route 实例返回变量值并注入到 Zend_Controller_Request 对象中,以供以后在调度程序以及用户创建的控制器中使用。如果匹配结果为负,则检查链中的下一条路由。

    【讨论】:

      【解决方案2】:

      我曾经为zend framework 1写了一个自定义路由,可以处理自定义的restful路由。到目前为止,它对我很有帮助。有关详细信息,请参阅https://github.com/aporat/Application_Rest_Controller_Route

      例如,如果您希望将诸如 /users/30/messages 之类的 url 正确映射到 zend 控制器操作中,请在引导程序中使用此路由:

      $frontController = Zend_Controller_Front::getInstance();
      $frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages']));
      

      【讨论】:

      • 虽然它并不完全是答案,但它确实为我指明了正确的方向,所以谢谢!最终我只是添加了另一个 Zend_Route 与常量控制器、模块和动作。
      • 不幸的是,存储库似乎不再可用,因此链接已损坏。
      猜你喜欢
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多