1

我正在研究一个宁静的 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); 其他类的结构将如何让它们处理请求并产生响应

4

1 回答 1

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 是汽车的唯一标识符。这不是 Rails,因此您当然要负责在 Api_AutoContoller 的 getAction() 方法中编写代码来查询数据库并返回有关 id 的 auto 信息:id 等。如果您需要将附加参数传递给其中一个路线,您可以执行以下操作之一:

(1) 明确 id 参数:[ApplicationURL]/auto/id/123/color/blue (2) 在请求正文中包含其他参数,或附加到 URL:[ApplicationURL]/auto/123?color=蓝色的

注意:您不必将所有这些都推到一个单独的模块中。如果您的应用程序小而简单,则为 Api 使用单独的模块可能没有意义。但这是我在工作项目中成功使用的设置。

于 2012-07-22T13:25:19.497 回答