我正在开发一个宁静的 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($requests); 其他类的结构如何让它们处理请求并产生响应
标准做法是为每个资源配备一个单独的控制器。 假设您有一个名为 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 是汽车的唯一标识符。 这不是 Rails,所以你当然要负责在 Api_AutoContoller 的 getAction() 方法中编写代码来查询数据库并返回有关 id :id 的 auto 的信息等。如果你需要将附加参数传递给其中之一路线,您可以执行以下操作之一:
(1) 明确 id 参数: [ApplicationURL]/auto/id/123/color/blue (2) 将其他参数包含在请求正文中,或附加到 URL 中: [ApplicationURL]/auto/123?color=blue
注意:您不必将所有这些都放入单独的模块中。 如果您的应用程序小而简单,则为 Api 使用单独的模块可能没有意义。 但这是我在工作项目中成功使用的设置。