将自定义路由添加到 Zend REST 控制器

Adding custom route to Zend REST controller

我正在使用 Zend F/W 1.12 来构建 REST 服务器。 我的要求之一是让一个动作超出 Zend 可以识别为 "Restfull" 动作的范围。我的意思是我想要一个名为 mymedia 之类的动作,并且想要路由指向 //mymedia 的请求。目前,Zend 将其理解为 getAction 的 id,当然这不是我想要的。

非常感谢任何帮助! 谢谢

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

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

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

然后您可以添加它,例如作为您 bootstrap class:

中的第一条路线
$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

Routing is a simple process of iterating through all provided routes and matching its definitions to current request URI. When a positive match is found, variable values are returned from the Route instance and are injected into the Zend_Controller_Request object for later use in the dispatcher as well as in user created controllers. On a negative match result, the next route in the chain is checked.

我曾经为 zend framework 1 写过一个自定义路由,可以处理自定义 restful 路由。直到现在它对我很有用。有关详细信息,请参阅 https://github.com/aporat/Application_Rest_Controller_Route

例如,如果您想将 url(例如 /users/30/messages)正确映射到 zend 控制器操作中,请在您的 bootstrap:

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