将自定义路由添加到 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_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 与常量控制器、模块和动作。 不幸的是,存储库似乎不再可用,因此链接已损坏。

以上是关于将自定义路由添加到 Zend REST 控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义标头添加到zend Mail Message

将自定义奏鸣曲页面路由添加到导航栏

无法将自定义按钮添加到导航控制器的工具栏

如何将自定义装饰器添加到 FastAPI 路由?

如何将自定义 RESTful 路由添加到 Rails 应用程序?

将自定义元素添加到 ngRepeat 列表