Symfony1 管理中的长脚本,Symfony中的任务?

Symfony1 管理中的长脚本,Symfony中的任务?,symfony1,admin,task,Symfony1,Admin,Task,在管理面板中,当管理员选择一个操作时,它将从API加载数据并将其保存到DB。这可能需要2秒到3分钟,这取决于他导入的内容 如何在Symfony中创建一个线程,这样管理员就不用等着完成了。完成后告诉他检查结果 这些任务是这个问题的答案吗 谢谢 不是特定于symfony,但您需要启动一些后台进程 我不熟悉symfony的命令行脚本工具,但我认为您可以使用一些东西 然后在控制器中,您需要大致如下内容(假设您在unixy主机上): 您的后台进程(在/path/to/Your/background/scr

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

如何在Symfony中创建一个线程,这样管理员就不用等着完成了。完成后告诉他检查结果

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


谢谢

不是特定于symfony,但您需要启动一些后台进程

我不熟悉symfony的命令行脚本工具,但我认为您可以使用一些东西

然后在控制器中,您需要大致如下内容(假设您在unixy主机上):

您的后台进程(在/path/to/Your/background/script.php中)应该获取传递的jobId,获取作业记录,并使用任何存储的输入来运行作业。在抓取数据并将其填充到数据库中后,它应该在表中设置一个结束时间(将作业标记为完成),然后执行任何您想执行的操作来通知用户(发送电子邮件,或在messages表中插入某种行,等等)

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"
}