我创建了一个名为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.
}
}
答案 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(您可以根据需要转换它们)。