예제 #1
0
 /**
  * Configures the error handler.
  *
  * @param Event|null $event The triggering event
  */
 public function configure(Event $event = null)
 {
     if (!$this->firstCall) {
         return;
     }
     $this->firstCall = false;
     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);
                 if (is_array($this->levels)) {
                     $scream = 0;
                     foreach ($this->levels as $type => $log) {
                         $scream |= $type;
                     }
                 } else {
                     $scream = $this->levels;
                 }
                 if ($this->scream) {
                     $handler->screamAt($scream);
                 }
                 $this->logger = $this->levels = null;
             }
             if (null !== $this->throwAt) {
                 $handler->throwAt($this->throwAt, true);
             }
         }
     }
     if (!$this->exceptionHandler) {
         if ($event instanceof KernelEvent) {
             $this->exceptionHandler = array($event->getKernel(), 'terminateWithException');
         } elseif ($event instanceof ConsoleEvent && ($app = $event->getCommand()->getApplication())) {
             $output = $event->getOutput();
             if ($output instanceof ConsoleOutputInterface) {
                 $output = $output->getErrorOutput();
             }
             $this->exceptionHandler = function ($e) use($app, $output) {
                 $app->renderException($e, $output);
             };
         }
     }
     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;
         }
         if ($handler instanceof ExceptionHandler) {
             $handler->setHandler($this->exceptionHandler);
             if (null !== $this->fileLinkFormat) {
                 $handler->setFileLinkFormat($this->fileLinkFormat);
             }
         }
         $this->exceptionHandler = null;
     }
 }
예제 #2
0
 /**
  * Configures the error handler.
  *
  * @param Event|null                    $event           The triggering event
  * @param string|null                   $eventName       The triggering event name
  * @param EventDispatcherInterface|null $eventDispatcher The dispatcher used to trigger $event
  */
 public function configure(Event $event = null, $eventName = null, EventDispatcherInterface $eventDispatcher = null)
 {
     if (null !== $eventDispatcher) {
         foreach (array_keys(static::getSubscribedEvents()) as $name) {
             $eventDispatcher->removeListener($name, array($this, 'configure'));
         }
     }
     $handler = set_error_handler('var_dump', 0);
     $handler = is_array($handler) ? $handler[0] : null;
     restore_error_handler();
     if ($handler instanceof ErrorHandler) {
         if ($this->logger) {
             $handler->setDefaultLogger($this->logger, $this->levels);
             if (is_array($this->levels)) {
                 $scream = 0;
                 foreach ($this->levels as $type => $log) {
                     $scream |= $type;
                 }
             } else {
                 $scream = null === $this->levels ? E_ALL | E_STRICT : $this->levels;
             }
             if ($this->scream) {
                 $handler->screamAt($scream);
             }
             $this->logger = $this->levels = null;
         }
         if (null !== $this->throwAt) {
             $handler->throwAt($this->throwAt, true);
         }
     }
     if (!$this->exceptionHandler) {
         if ($event instanceof KernelEvent) {
             $this->exceptionHandler = array($event->getKernel(), 'terminateWithException');
         } elseif ($event instanceof ConsoleEvent && ($app = $event->getCommand()->getApplication())) {
             $output = $event->getOutput();
             if ($output instanceof ConsoleOutputInterface) {
                 $output = $output->getErrorOutput();
             }
             $this->exceptionHandler = function ($e) use($app, $output) {
                 $app->renderException($e, $output);
             };
         }
     }
     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;
         }
         if ($handler instanceof ExceptionHandler) {
             $handler->setHandler($this->exceptionHandler);
             if (null !== $this->fileLinkFormat) {
                 $handler->setFileLinkFormat($this->fileLinkFormat);
             }
         }
         $this->exceptionHandler = null;
     }
 }