[HttpKernel] Prevent a fatal error when DebugHandlersListener is used with a kernel with no terminateWithException() method
This commit is contained in:
parent
1c79c7b234
commit
2849152c5e
@ -93,7 +93,9 @@ class DebugHandlersListener implements EventSubscriberInterface
|
|||||||
}
|
}
|
||||||
if (!$this->exceptionHandler) {
|
if (!$this->exceptionHandler) {
|
||||||
if ($event instanceof KernelEvent) {
|
if ($event instanceof KernelEvent) {
|
||||||
$this->exceptionHandler = array($event->getKernel(), 'terminateWithException');
|
if (method_exists($event->getKernel(), 'terminateWithException')) {
|
||||||
|
$this->exceptionHandler = array($event->getKernel(), 'terminateWithException');
|
||||||
|
}
|
||||||
} elseif ($event instanceof ConsoleEvent && $app = $event->getCommand()->getApplication()) {
|
} elseif ($event instanceof ConsoleEvent && $app = $event->getCommand()->getApplication()) {
|
||||||
$output = $event->getOutput();
|
$output = $event->getOutput();
|
||||||
if ($output instanceof ConsoleOutputInterface) {
|
if ($output instanceof ConsoleOutputInterface) {
|
||||||
|
@ -21,7 +21,10 @@ use Symfony\Component\Console\Output\ConsoleOutput;
|
|||||||
use Symfony\Component\Debug\ErrorHandler;
|
use Symfony\Component\Debug\ErrorHandler;
|
||||||
use Symfony\Component\Debug\ExceptionHandler;
|
use Symfony\Component\Debug\ExceptionHandler;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcher;
|
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpKernel\Event\KernelEvent;
|
||||||
use Symfony\Component\HttpKernel\EventListener\DebugHandlersListener;
|
use Symfony\Component\HttpKernel\EventListener\DebugHandlersListener;
|
||||||
|
use Symfony\Component\HttpKernel\HttpKernelInterface;
|
||||||
use Symfony\Component\HttpKernel\KernelEvents;
|
use Symfony\Component\HttpKernel\KernelEvents;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,6 +65,31 @@ class DebugHandlersListenerTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertSame(array($logger, LogLevel::INFO), $loggers[E_DEPRECATED]);
|
$this->assertSame(array($logger, LogLevel::INFO), $loggers[E_DEPRECATED]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testConfigureForHttpKernelWithNoTerminateWithException()
|
||||||
|
{
|
||||||
|
$listener = new DebugHandlersListener(null);
|
||||||
|
$eHandler = new ErrorHandler();
|
||||||
|
$event = new KernelEvent(
|
||||||
|
$this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'),
|
||||||
|
Request::create('/'),
|
||||||
|
HttpKernelInterface::MASTER_REQUEST
|
||||||
|
);
|
||||||
|
|
||||||
|
$exception = null;
|
||||||
|
$h = set_exception_handler(array($eHandler, 'handleException'));
|
||||||
|
try {
|
||||||
|
$listener->configure($event);
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
}
|
||||||
|
restore_exception_handler();
|
||||||
|
|
||||||
|
if (null !== $exception) {
|
||||||
|
throw $exception;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertNull($h);
|
||||||
|
}
|
||||||
|
|
||||||
public function testConsoleEvent()
|
public function testConsoleEvent()
|
||||||
{
|
{
|
||||||
$dispatcher = new EventDispatcher();
|
$dispatcher = new EventDispatcher();
|
||||||
|
Reference in New Issue
Block a user