如何在控制器中的 $promise->then() 中加载 CodeIgniter 视图?
How to load a CodeIgniter view in $promise->then() in a controller?
在我的 CodeIgniter 2 控制器中,我调用了一个 returns ReactPHP promise 的模型方法,我想在该 promise 的 ->then()
方法调用的函数中加载一个 CodeIgniter 视图。我怎样才能做到这一点?相反发生的是控制器方法 returns 什么都没有,所以我在浏览器中得到一个空白页面。
这里有一个简化的例子来说明我正在尝试做的事情:
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);
});
}
}
有什么方法可以告诉控制器方法在 promise 解决之前不要将输出发送到浏览器?
我不确定你想做什么但是如果你想停止输出视图并且return它作为一个字符串然后用 echo 自己输出它你可以这样做:
$view = this->load->view('my_view', $data, TRUE);
现在您拥有作为 var 字符串的视图,您可以使用它来执行您想要执行的操作。
事实证明,我原来问题中的代码确实有效。所以问题就是答案。但它对我不起作用的原因是 returns_a_promise()
没有 returning resolved 承诺,所以 ->then()
没有被调用并且未呈现视图。为了使其 return 成为已解决的承诺,我不得不在 return 承诺的代码中调用 $deferred->resolve();
。
结果是此代码示例演示了可以在 CodeIgniter 控制器方法中 运行 异步 PHP(在本例中通过 ReactPHP)。我的特定用例是 运行 在 CodeIgniter 模型中同时进行许多数据库查询。
试试这个:
function my_method() {
$data = array();
$data['promise'] =$this->my_model->returns_a_promise();
$data['view'] = 'my_view';
$this->load->view('my_view', $data);
}
在我的 CodeIgniter 2 控制器中,我调用了一个 returns ReactPHP promise 的模型方法,我想在该 promise 的 ->then()
方法调用的函数中加载一个 CodeIgniter 视图。我怎样才能做到这一点?相反发生的是控制器方法 returns 什么都没有,所以我在浏览器中得到一个空白页面。
这里有一个简化的例子来说明我正在尝试做的事情:
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);
});
}
}
有什么方法可以告诉控制器方法在 promise 解决之前不要将输出发送到浏览器?
我不确定你想做什么但是如果你想停止输出视图并且return它作为一个字符串然后用 echo 自己输出它你可以这样做:
$view = this->load->view('my_view', $data, TRUE);
现在您拥有作为 var 字符串的视图,您可以使用它来执行您想要执行的操作。
事实证明,我原来问题中的代码确实有效。所以问题就是答案。但它对我不起作用的原因是 returns_a_promise()
没有 returning resolved 承诺,所以 ->then()
没有被调用并且未呈现视图。为了使其 return 成为已解决的承诺,我不得不在 return 承诺的代码中调用 $deferred->resolve();
。
结果是此代码示例演示了可以在 CodeIgniter 控制器方法中 运行 异步 PHP(在本例中通过 ReactPHP)。我的特定用例是 运行 在 CodeIgniter 模型中同时进行许多数据库查询。
试试这个:
function my_method() {
$data = array();
$data['promise'] =$this->my_model->returns_a_promise();
$data['view'] = 'my_view';
$this->load->view('my_view', $data);
}