在管理面板中,当管理员选择一个操作时,它将从 API 加载数据并将其保存到数据库中。这可能需要 2 秒到 3 分钟,具体取决于他正在导入的内容。
我怎样才能在 Symfony 中创建像线程一样的东西,所以管理员不等待完成。完成后告诉他检查结果?
这些任务是这个问题的答案吗?
谢谢!
不是特定于 symfony 的,但你会想要启动一些后台进程。
我不熟悉 symfony 的命令行脚本工具,但我认为有些东西可以使用。
然后在你的控制器中,你想要大致类似的东西(假设你在一个 unixy 主机上):
public function executeYourBackgroundTask(){
// first, you might want to create some kind of entry in a table to keep track of jobs.
// Imagine you've got a table to keep track of this stuff
$job = new Backgroundjob();
$job->user_id = $this->getUser()->getId();
$job->starttime = time();
$job->someArgument = $someArgument; //anything the job script needs for input.
$job->save();
$jobId = $job->getId();
//start a job in the background.
exec('php /path/to/your/background/script.php ' . $jobId .' &');
//your view should just tell the user "Your job is being processed, you'll be notified when it is done"
}
您的后台进程(在 /path/to/your/background/script.php 中)应该采用传递的 jobId,获取作业记录,并使用任何存储的输入来运行作业。当它完成抓取数据并将其填充到数据库中时,它应该在表中设置一个结束时间(将作业标记为完成),然后做任何你想做的事情来通知用户(发送电子邮件,或插入一些一种进入消息表的行等)