内部使用API​​模块(ZF1)

时间:2013-08-02 13:22:28

标签: php zend-framework

我创建了一个名为API的模块,它为外部客户端提供服务并返回json数据。像http://example.com/api/user/get-by-id/1这样的端点返回用户模型的json表示。现在我想在我们的网站上使用相同的api以避免重复的代码。

所以在我的网站上,如果我想获取用户信息,我应该调用api的get-by-id方法(api模块,用户控制器,getById动作)

当然我不想通过http做到这一点。那么我所追求的是,​​有没有办法调用另一个控制器的动作,捕获响应,并继续原始动作。

<?php 
Class IndexController {
       public function indexAction()
       {
            $user = $this->apiCall(array('userid' => 1)); // This is what I am trying to do.
       }
}

1 个答案:

答案 0 :(得分:0)

Zend中的控制器不是为此而设计的。

您可以尝试这样的事情:

    $request = new Zend_Controller_Request_Simple();
    $request->setParam('id', 55); //param to you API
    $ApiController = new Api_ApiController($request, new Zend_Controller_Response_Http());
    $ApiController->apiAction(); //your API Action
    $yourResultHere = $ApiController->view->result; //get result from View (this is data send to view, not rendered result)

但这不是好Zend编程实践;)

其他选项是创建Controller并从ApiController而不是Zend_Controller_Action扩展它,因此您可以使用以下函数:$this->apiAction()并将结果放在当前视图中。

但最好的方法是将API的代码移动到Model层,并使用返回数据的类作为ApiController中的数组或对象(将它们转换为JSON)和当前的Controller(您可以根据需要转换它们)。