在我的CodeIgniter 2控制器中,我调用了一个返回ReactPHP Promise的模型方法,并且我想在该Promise的->then()
方法所调用的函数中加载CodeIgniter视图。我怎样才能做到这一点?相反,发生的事情是controller方法什么也不返回,所以我在浏览器中得到一个空白页。
这是一个简化的示例,说明了我要执行的操作:
class My_class extends My_Controller {
function my_method() {
$this->my_model->returns_a_promise()->then(function ($data) {
// How can I pass the promise's resolved value to the template here?
// It seems this never gets called, because my_method() returns
// before we get here. :(
$this->load->view('my_view', $data);
});
}
}
有什么办法告诉控制器方法在诺言解决之前不要将输出发送到浏览器?
答案 0 :(得分:1)
我不确定您要做什么,但是如果您想停止视图的输出并将其作为字符串返回,然后自己用echo输出,您可以这样做:
$view = this->load->view('my_view', $data, TRUE);
现在,您可以将视图作为var字符串使用,可以使用它来执行您要尝试执行的操作。
答案 1 :(得分:0)
原来我的问题中的代码确实有效。所以问题就是答案。但是它对我不起作用的原因是returns_a_promise()
没有返回 resolved 承诺,所以没有调用->then()
并且没有渲染视图。为了使其返回已解决的承诺,我必须在返回承诺的代码中调用$deferred->resolve();
。
其结果是此代码示例演示了可以在CodeIgniter控制器方法中运行异步PHP(在这种情况下,通过ReactPHP)。我的特殊用例是在CodeIgniter模型中同时运行许多数据库查询。
答案 2 :(得分:0)
尝试一下:
function my_method() {
$data = array();
$data['promise'] =$this->my_model->returns_a_promise();
$data['view'] = 'my_view';
$this->load->view('my_view', $data);
}