首页 > 解决方案 > 如何调用内核终止事件

问题描述

我试图向用户发送响应,并在它为我的服务做出努力之后。我在那里找到了另一个线程(如何在服务中使用 kernel.terminate 事件)。但它不起作用。当我尝试在那里进行类似操作时,我的日志中出现了下一条消息: php.INFO: User Deprecated: Calling the "Symfony\Component\EventDispatcher\EventDispatcherInterface::dispatch()" 然后我就这样尝试了:

public function makeHardWork()
{
    $this->dispatcher->addListener(KernelEvents::TERMINATE, function (Event $event){
        $this->logger->log(LogLevel::ERROR,'123456');
    },1);
}

我也尝试在 index.php 中转储 $kernel 并且有我的订阅者。但没有任何记录。我应该怎么做才能工作?

标签: phpsymfonyeventsservicesymfony-kernel

解决方案


你试过这个吗?

服务.yaml

App\EventListener\SomeEventListener:
    tags:
        - { 'name': 'kernel.event_listener', 'event': 'kernel.terminate', 'method': 'onTerminateEvent' }

一些事件监听器

<?php

namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\TerminateEvent;

class SomeEventListener
{
    private $someSerive;

    public function __construct(SomeService $someService)
    {
        $this->someService = $someService;
    }

    public function onTerminateEvent(TerminateEvent $event)
    {
        $request = $event->getRequest();
        if ($request->get('_route') !== 'some_route_name') {
            return;
        }

        $this->someService->makeHardWork();
    }
}

推荐阅读