gpt4 book ai didi

symfony - 如何在服务中使用 kernel.terminate 事件

转载 作者:行者123 更新时间:2023-12-04 22:56:32 25 4
gpt4 key购买 nike

我做了一个运行繁重任务的服务,这个服务是在 Controller 中调用的。
为了避免页面加载时间过长,我想返回 HTTP 响应并在之后运行繁重的任务。

我读过我们可以使用 kernel.terminate 事件来做到这一点,但我不明白如何使用它。

目前我尝试在 KernelEvent:TERMINATE 上做一个监听器,但我不知道如何过滤,因为监听器只在好的页面上执行工作......

是否可以添加一个函数以在事件触发时执行?然后在我的 Controller 中,我使用该函数添加我的 Action ,然后 Symfony 执行它。

谢谢你的帮助。

最佳答案

最后,我找到了如何去做,我在我的服务中使用了 EventDispatcher,并在此处连接了一个 PHP 闭包:http://symfony.com/doc/current/components/event_dispatcher.html#connecting-listeners

use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpKernel\KernelEvents;

class MyService
{
private $eventDispatcher;

public function __construct(TokenGenerator $tokenGenerator, EventDispatcherInterface $eventDispatcher)
{
$this->tokenGenerator = $tokenGenerator;
$this->eventDispatcher = $eventDispatcher;
}

public function createJob($query)
{
// Create a job token
$token = $this->tokenGenerator->generateToken();

// Add the job in database
$job = new Job();
$job->setName($token);
$job->setQuery($query);

// Persist the job in database
$this->em->persist($job);
$this->em->flush();

// Call an event, to process the job in background
$this->eventDispatcher->addListener(KernelEvents::TERMINATE, function (Event $event) use ($job) {
// Launch the job
$this->launchJob($job);
});

return $job;
}

关于symfony - 如何在服务中使用 kernel.terminate 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43612879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com