如何从各种控制器访问进程对象

How to access process object from various controllers

我正在通过 Symfony Process 组件启动一个简单的流程。

/**
 * @Route("/start_process", name="startProcess")
 */
public function startProcessAction(Request $siteName) {

    $process = new Process('"C:\Program Files (x86)\GnuWin32\bin\wget.exe" --no-parent -U Mozilla -r http://google.de/');
    $process->start();

    return new Response("Process STARTED");
}

这部分工作正常。然而,由于这个过程有时需要更长的时间才能完成,我想检查一下它的进度和输出。该过程是异步启动的,所以我认为我应该能够在通过 ajax 调用的不同控制器中执行此操作。

我不知道如何从另一个控制器访问进程对象。

实现进程日志系统,这样你不仅可以查看当前哪个进程是运行,它花费了多少时间,某一天有多少个进程运行,等等. 您甚至可以收集有关每个站点的平均处理持续时间等的统计信息。

只需创建您自己的 Process class 即可扩展 symfony 并覆盖 process() 方法,使其首先将新记录插入日志,然后调用父级的 process()方法。然后在控制器中确保 return 唯一进程 ID,它将用于通过 ajax 调用检查其状态(in_process、完成、超时等)。

或者您可以直接在控制器中进行日志记录。