如何知道GetResponseForExceptionEvent是否在kernel.terminate期间或之后发生?

时间:2018-06-25 11:13:55

标签: symfony symfony-2.8

如果alsa-mixer发生在GetResponseForExceptionEvent之前,那么我们可以设置kernel.response对象并将其发送给用户。但是,如果它发生在Response之后或之中(发送了实际的响应之后),则没有官方的方法/ API来检查响应是否已经发送。

kernel.terminate

1 个答案:

答案 0 :(得分:1)

您可以在ExceptionListener中注入RequestStackRequestStack文档说

  

在请求处理之外,$requestStack->getCurrentRequest()   返回null。

因此,在您的听众中,您可以检查$currentRequest

<?php

namespace App\EventListener;

use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;

class ExceptionListener
{
    protected $requestStack;

    public function __construct(RequestStack $requestStack)
    {
        $this->requestStack = $requestStack;
    }

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        if (null === $this->requestStack->getCurrentRequest()) {
             // exception is happen outside the handling of a request
             // so before request is handled and after response has been sent
        }
    }
}