0

在管理面板中,当管理员选择一个操作时,它将从 API 加载数据并将其保存到数据库中。这可能需要 2 秒到 3 分钟,具体取决于他正在导入的内容。

我怎样才能在 Symfony 中创建像线程一样的东西,所以管理员不等待完成。完成后告诉他检查结果?

这些任务是这个问题的答案吗?

谢谢!

4

1 回答 1

2

不是特定于 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,获取作业记录,并使用任何存储的输入来运行作业。当它完成抓取数据并将其填充到数据库中时,它应该在表中设置一个结束时间(将作业标记为完成),然后做任何你想做的事情来通知用户(发送电子邮件,或插入一些一种进入消息表的行等)

于 2009-11-01T20:19:09.750 回答