private $fileLinkFormat;
private $scope;
private $firstCall = true;
+ private $hasTerminatedWithException;
/**
* @param callable|null $exceptionHandler A handler that will be called on Exception
/**
* Configures the error handler.
- *
- * @param Event|null $event The triggering event
*/
public function configure(Event $event = null)
{
- if (!$this->firstCall) {
+ if (!$event instanceof KernelEvent ? !$this->firstCall : !$event->isMasterRequest()) {
return;
}
- $this->firstCall = false;
+ $this->firstCall = $this->hasTerminatedWithException = false;
+
+ $handler = set_exception_handler('var_dump');
+ $handler = is_array($handler) ? $handler[0] : null;
+ restore_exception_handler();
+
if ($this->logger || null !== $this->throwAt) {
- $handler = set_error_handler('var_dump');
- $handler = is_array($handler) ? $handler[0] : null;
- restore_error_handler();
if ($handler instanceof ErrorHandler) {
if ($this->logger) {
$handler->setDefaultLogger($this->logger, $this->levels);
$handler->screamAt($levels);
}
if ($this->scope) {
- $handler->scopeAt($this->levels);
+ $handler->scopeAt($levels & ~E_USER_DEPRECATED & ~E_DEPRECATED);
} else {
$handler->scopeAt(0, true);
}
}
if (!$this->exceptionHandler) {
if ($event instanceof KernelEvent) {
- if (method_exists($event->getKernel(), 'terminateWithException')) {
- $this->exceptionHandler = array($event->getKernel(), 'terminateWithException');
+ if (method_exists($kernel = $event->getKernel(), 'terminateWithException')) {
+ $request = $event->getRequest();
+ $hasRun = &$this->hasTerminatedWithException;
+ $this->exceptionHandler = function (\Exception $e) use ($kernel, $request, &$hasRun) {
+ if ($hasRun) {
+ throw $e;
+ }
+ $hasRun = true;
+ $kernel->terminateWithException($e, $request);
+ };
}
} elseif ($event instanceof ConsoleEvent && $app = $event->getCommand()->getApplication()) {
$output = $event->getOutput();
}
}
if ($this->exceptionHandler) {
- $handler = set_exception_handler('var_dump');
- $handler = is_array($handler) ? $handler[0] : null;
- restore_exception_handler();
if ($handler instanceof ErrorHandler) {
- $h = $handler->setExceptionHandler('var_dump') ?: $this->exceptionHandler;
- $handler->setExceptionHandler($h);
- $handler = is_array($h) ? $h[0] : null;
+ $h = $handler->setExceptionHandler('var_dump');
+ if (is_array($h) && $h[0] instanceof ExceptionHandler) {
+ $handler->setExceptionHandler($h);
+ $handler = $h[0];
+ } else {
+ $handler->setExceptionHandler($this->exceptionHandler);
+ }
}
if ($handler instanceof ExceptionHandler) {
$handler->setHandler($this->exceptionHandler);