Как узнать, произошло ли GetResponseForExceptionEvent во время или после kernel.terminate? - PullRequest
0 голосов
/ 25 июня 2018

Если GetResponseForExceptionEvent происходит раньше kernel.response, тогда мы можем установить Response объект, и он будет отправлен пользователю.Но если это происходит после или во время kernel.terminate (после того, как фактический ответ был отправлен), не существует официального способа / API для проверки, был ли ответ уже отправлен.

public function onKernelException(GetResponseForExceptionEvent $event)
{
    // how to know if $event this happened after/during kernel.terminate?
}

1 Ответ

0 голосов
/ 28 июня 2018

В вашем ExceptionListener вы можете ввести RequestStack. RequestStack документация гласит, что

Вне обработки запроса $requestStack->getCurrentRequest() возвращает ноль.

Таким образом, в вашем слушателе вы можете проверить $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
        }
    }
}
...