我正在开发一个宁静的zend-API框架工作。问题是,当发布请求时,我没有如何将来自控制器的数据放入单独的类进行处理并将处理后的输出返回给控制器的概念。 即在
下实现putAction函数的最佳方法public function putAction()
{
$resource = $this->_getParam('resource');
$this->view->resource = $resource;
//$requests = $this->getRequest();
switch (true) {
case (strstr($resource, 'account')):
$response = $this -> do_post_request($requests);
$resource = "You are accessing account";
break;
case (strstr($resource, 'property')):
$response = $this -> do_post_request($requests);
$resource = "You are accessing property";
break;
case (strstr($resource, 'autos')):
$response = $this -> do_post_request($requests);
$resource = "You are accessing autos";
break;
default:
$resource = "The specified resource is not available please check the api manual for available resources";
break;
}
$this->view->message = $response;
$this->_response->ok();
}
其他类中的其他函数处理后收集响应的位置。 如果我要使用:$ response = $ this - > do_post_request($请求); 其他类的结构将如何处理请求并产生响应
答案 0 :(得分:3)
标准做法是为每个资源配备一个单独的控制器。假设您有一个名为api的模块,其名称空间为'Api_',您可以在application.ini文件中设置,如下所示:
autoloadernamespaces = "Api_"
然后,您的api模块文件夹中应该有以下3个控制器:
class Api_AccountController extends Zend_Rest_Controller {
public function init()
{
}
public function getAction()
{
}
public function postAction()
{
}
public function putAction()
{
}
public function deleteAction()
{
}
}
其他人显然是Api_AutoController,Api_PropertyController。然后,您必须告诉Zend哪个模块用于Rest请求。在您的application.ini文件中:
routes.api.type = Zend_Rest_Route
routes.api.defaults.module = api
routes.api.defaults.controller = api
routes.api.api = auto,account,property
Zend现在将自动响应GET http://yourapplication.com/auto/:id之类的请求 其中:id是auto的唯一标识符。这不是Rails,所以你当然负责在Api_AutoContoller的getAction()方法中编写代码来查询数据库并返回有关auto:id等的auto的信息。如果你需要将其他参数传递给其中一个路线,您可以执行以下操作之一:
(1)使id param明确: [ApplicationURL] /自动/ ID / 123 /颜色/蓝 (2)在请求正文中包含其他参数,或附加到URL: [ApplicationURL] /自动/ 123?颜色=蓝色
注意:您不必将所有这些都推到单独的模块中。如果您的应用程序小而简单,那么为Api使用单独的模块可能没有意义。但这是我在工作中成功使用的设置。