如何设置的分级Zend其余的路线?
-
18-09-2019 - |
题
与Zend框架,我在试图建立的路线对其他api在资源组织在下列模式:
- http://example.org/users/
- http://example.org/users/234
- http://example.org/users/234/items
- http://example.org/users/234/items/34
我如何设立这与Zend_Rest_Route?
这里是我设置的路线资源用户(用户/:id)在我的bootstrap.php 文件:
$this->bootstrap('frontController');
$frontController = Zend_Controller_Front::getInstance();
$restRoute = new Zend_Rest_Route($frontController);
$frontController->getRouter()->addRoute('default', $restRoute);
[如我了解,这是一个赶上所有的路线,使用户/324/项目/34会结果的参数设置为id=324和项目=34和一切将映射的用户(前模块)的模型。从那里我想我可能只是试验项目的参数和检索项目#34户#324在得到请求。]<===我只是检查并且它不似乎一样工作:
Acessing/用户/234/项目/43和
var_dump($this->_getAllParams());
在得到行动的其他控制器的结果在以下产出:
array(4) {
["controller"]=> string(5) "users"
["action"]=> string(3) "get"
[2]=> string(5) "items" ["module"]=> string(7) "default"]
}
不知何故,这两个id迷路了...
任何人吗?
解决方案
据我所知,没有功能在Zend_Rest_Route这可以让你做这样的事情。有一个建议但不能确定时,它将可以实现的。你可以把这个在你的引导至设立了这个定义的路线。
$front = $this->getResource('FrontController');
$testRoute = new Zend_Controller_Router_Route(
'users/:user_id/items/:item_id',
array(
'controller' => 'users',
'action' => 'item',
'module' => 'default'
)
);
$front->getRouter()->addRoute('test', $testRoute);
user_id 或 item_id 成为提供itemAction在UsersController作为参数:
$user_id = $this->_request->getParam('user_id');
其他提示
我开源了解到审查和作为一个作曲家包。看看 https://github.com/aporat/Application_Rest_Controller_Route.
我增加了一个新的类延伸Zend_Controller_Router_Route,并增加了abiliy添加自定义的宁静的路线,例如
$frontController = Zend_Controller_Front::getInstance();
$frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages']));
Zend_Rest_Route地图的第一个参数后,控制器的名称为'id'只有当有1参数。
最好的解决方案我来是类Zend_Rest_Route和复盖匹配()function.复制Zend_Rest_Route的匹配功能,但是添加以下只是之前的"摘要URI Params"的评论(大约60行中)。
if($pathElementCount > 1 && $path[0] != 'id') {
$params['id'] = urldecode($path[0]);
array_shift($path);
}
这应该给你的功能寻找。