我正在使用Zend F / W 1.12来构建REST服务器。 我的一个要求是要有一个超出Zend能够识别为" Restfull"行动。我的意思是我希望有一个名为mymedia的动作,并希望将路径请求引导到// mymedia。目前,Zend将其理解为getAction的id,当然这不是我想要的。
任何帮助将受到高度赞赏! 感谢
答案 0 :(得分:3)
Zend_Rest_Route
的实现不允许太多自定义,而是为开箱即用的使用提供了基本的路由方案。
因此,如果您需要更改URI的解释方式,您可以扩展Zend_Rest_Route
,Zend_Controller_Router_Route_Module
或Zend_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']));