【问题标题】:Long script in admin, task in Symfony?管理员中的长脚本,Symfony 中的任务?
【发布时间】:2009-11-01 19:03:27
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: symfony1 admin task


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2013-08-06
      相关资源
      最近更新 更多