将自定义路由添加到 Zend REST 控制器
Posted
技术标签:
【中文标题】将自定义路由添加到 Zend REST 控制器【英文标题】:Adding custom route to Zend REST controller 【发布时间】:2015-12-22 00:45:30 【问题描述】:我正在使用 Zend F/W 1.12 来构建一个 REST 服务器。 我的要求之一是有一个超出 Zend 可以识别为“Restfull”动作边界的动作。我的意思是,我想要一个名为 mymedia 之类的操作,并希望路由定向到 //mymedia 的请求。目前,Zend 将其理解为 getAction 的 id,当然这不是我想要的。
任何帮助将不胜感激! 谢谢
【问题讨论】:
【参考方案1】:Zend_Rest_Route
的实现不允许进行太多自定义,而是为开箱即用的使用提供了基本的路由方案。
因此,如果您需要更改 URI 的解释方式,您可以扩展 Zend_Rest_Route
、Zend_Controller_Router_Route_Module
或 Zend_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 与常量控制器、模块和动作。 不幸的是,存储库似乎不再可用,因此链接已损坏。以上是关于将自定义路由添加到 Zend REST 控制器的主要内容,如果未能解决你的问题,请参考以下文章