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

时间:2015-09-24 12:08:10

标签: api rest zend-framework routes

我正在使用Zend F / W 1.12来构建REST服务器。 我的一个要求是要有一个超出Zend能够识别为" Restfull"行动。我的意思是我希望有一个名为mymedia的动作,并希望将路径请求引导到// mymedia。目前,Zend将其理解为getAction的id,当然这不是我想要的。

任何帮助将受到高度赞赏! 感谢

2 个答案:

答案 0 :(得分:3)

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

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

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

然后你可以添加它,例如作为bootstrap类中的第一个路径:

$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对象,以便稍后在调度程序和用户创建的控制器中使用。在负匹配结果上,检查链中的下一个路径。

答案 1 :(得分:0)

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

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

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