这是我的具体问题。我想制作一个api级别,然后你可以选择你将使用哪种方法。例如:
test.com/api/rest
test.com/api/xmlprc
目前我有api映射到模块目录。然后,我设置了一条路线,使其成为休息路线。 test.com/api是一条休息路线,但我宁愿让它成为test.com/api/rest。这将允许我稍后添加其他内容。
在Bootstrap.php中:
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$route = new Zend_Controller_Router_Route(
'api/:module/:controller/:id/*',
array('module' =>'default')
);
$ router-> addRoute('api',$ route);
$ restRoute = new Zend_Rest_Route($ front,array(),array( '休息' )); $ router-> addRoute('rest',$ restRoute);
返回$ router;
在application.ini中:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
我知道它会涉及路由,但有时我发现Zend Framework文档有点难以理解。
当我去test.com/rest/controller/它应该如何工作,但如果我去test.com/api/rest/它告诉我我的模块是api而控制器是休息。
答案 0 :(得分:0)
你的原始线就是这个。
$restRoute = new Zend_Rest_Route($front, array(), array( 'rest' ));
要为特定控制器启用Zend_Rest_Route,请添加一个控制器名称数组作为每个模块数组元素的值。
$restRoute = new Zend_Rest_Route($front, array(), array( 'api' ) => array('rest'));
另请参考 http://framework.zend.com/manual/en/zend.controller.router.html
我希望这可能有所帮助。
答案 1 :(得分:0)
你可能真的想做像api /:controller /:action.json或api /:controller /:action.xml这样的事情(我见过很多API这样做,例如:Twitter)。
要实现这一目标,您可以执行以下操作:
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter(); // returns a rewrite router by default
$router->addRoute(
'json_request',
new Zend_Controller_Router_Route_Regex(
'([^-]*)/([^-]*)/([^-]*)\.json',
array(
'controller' => 'index',
'action' => 'index',
'request_type' => 'json'),
array(
1 => 'module',
2 => 'controller',
3 => 'action'
)
));
然后只需检查您的参数“request-type”,并根据您拥有的内容提供请求。 您应该根据您的请求更改布局以包含JSON或XML。
您还需要一个API模块。
注意:请注意当前将模块的引导程序添加到所有模块中,以便在所有模块中运行此路由。我目前正在检查解决此问题的方法,因此无法告诉您如何操作。
希望它有所帮助!