|
@@ -237,6 +237,67 @@ class ClassCollectionLoader
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+namespace Symfony\Component\HttpKernel\Debug
|
|
|
|
+{
|
|
|
|
+use Symfony\Component\EventDispatcher\EventDispatcher;
|
|
|
|
+use Symfony\Component\EventDispatcher\Event;
|
|
|
|
+use Symfony\Component\HttpKernel\Log\LoggerInterface;
|
|
|
|
+use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
|
|
|
|
+use Symfony\Component\HttpKernel\HttpKernelInterface;
|
|
|
|
+use Symfony\Component\HttpKernel\Exception\FlattenException;
|
|
|
|
+use Symfony\Component\HttpFoundation\Request;
|
|
|
|
+class ExceptionListener
|
|
|
|
+{
|
|
|
|
+ protected $controller;
|
|
|
|
+ protected $logger;
|
|
|
|
+ public function __construct($controller, LoggerInterface $logger = null)
|
|
|
|
+ {
|
|
|
|
+ $this->controller = $controller;
|
|
|
|
+ $this->logger = $logger;
|
|
|
|
+ }
|
|
|
|
+ public function register(EventDispatcher $dispatcher, $priority = 0)
|
|
|
|
+ {
|
|
|
|
+ $dispatcher->connect('core.exception', array($this, 'handle'), $priority);
|
|
|
|
+ }
|
|
|
|
+ public function handle(Event $event)
|
|
|
|
+ {
|
|
|
|
+ static $handling;
|
|
|
|
+ if (true === $handling) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ $handling = true;
|
|
|
|
+ $exception = $event->get('exception');
|
|
|
|
+ $request = $event->get('request');
|
|
|
|
+ if (null !== $this->logger) {
|
|
|
|
+ $this->logger->err(sprintf('%s: %s (uncaught exception)', get_class($exception), $exception->getMessage()));
|
|
|
|
+ } else {
|
|
|
|
+ error_log(sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine()));
|
|
|
|
+ }
|
|
|
|
+ $logger = null !== $this->logger ? $this->logger->getDebugLogger() : null;
|
|
|
|
+ $attributes = array(
|
|
|
|
+ '_controller' => $this->controller,
|
|
|
|
+ 'exception' => FlattenException::create($exception),
|
|
|
|
+ 'logger' => $logger,
|
|
|
|
+ 'format' => 0 === strncasecmp(PHP_SAPI, 'cli', 3) ? 'txt' : $request->getRequestFormat(),
|
|
|
|
+ );
|
|
|
|
+ $request = $request->duplicate(null, null, $attributes);
|
|
|
|
+ try {
|
|
|
|
+ $response = $event->getSubject()->handle($request, HttpKernelInterface::SUB_REQUEST, true);
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
+ $message = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($e), $e->getMessage());
|
|
|
|
+ if (null !== $this->logger) {
|
|
|
|
+ $this->logger->err($message);
|
|
|
|
+ } else {
|
|
|
|
+ error_log($message);
|
|
|
|
+ }
|
|
|
|
+ throw $exception;
|
|
|
|
+ }
|
|
|
|
+ $event->setReturnValue($response);
|
|
|
|
+ $handling = false;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+}
|
|
namespace Symfony\Component\DependencyInjection
|
|
namespace Symfony\Component\DependencyInjection
|
|
{
|
|
{
|
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
|
@@ -382,10 +443,3 @@ interface ParameterBagInterface
|
|
function has($name);
|
|
function has($name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-namespace Symfony\Component\DependencyInjection
|
|
|
|
-{
|
|
|
|
-interface TaggedContainerInterface extends ContainerInterface
|
|
|
|
-{
|
|
|
|
- function findTaggedServiceIds($name);
|
|
|
|
-}
|
|
|
|
-}
|
|
|