我正在做CakePHP 3.4项目。
我必须执行一些命令来扫描特定目录的文件和目录。这可能需要很长时间,具体取决于目录的大小,因此我想在后台运行它并在视图中标记正在运行的标签,直到它成功执行。
如何在后台从控制器运行 Shell 任务并在执行时更新数据库?
我是壳牌任务的新手。
如果这是一项耗时的任务,那么您的想法是在后台运行它。您将需要使用某种形式的队列系统,该系统允许您将作业添加到队列中,然后可以通过从 cronjob 运行队列在后台运行该队列。看看队列插件来做到这一点。
您基本上需要创建一个队列任务,其中包含您需要在后台运行的功能,然后将作业添加到将在后台运行该任务的队列中。队列插件的文档显示了如何执行此操作,并且插件中包含大量示例队列任务。
如果需要指示排队作业的状态,可以将作业的 ID 保存在会话中,并在加载页面时检查它是否完成。
您可以从控制器调度命令行管理程序任务。如果你想在后台运行它,你可以,例如,通过JavaScript/Ajax运行这个控制器操作。
// maybe this task runs looooong
set_time_limit(0);
$shell = new ShellDispatcher();
$output = $shell->run(['cake', 'bake', 'model', 'Products']);
if ($output === 0) {
$this->Flash->success('Yep!');
} else {
$this->Flash->error('Nope!');
}
但你至少可以用谷歌搜索一下。
编辑 忘记这个,去找博士的答案。