Fabien Potencier пре 14 година
родитељ
комит
f4cf31a275

+ 2 - 0
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

@@ -241,6 +241,7 @@ class FrameworkExtension extends Extension
         $this->addClassesToCompile(array(
             'Symfony\\Component\\Templating\\DelegatingEngine',
             'Symfony\\Bundle\\FrameworkBundle\\Templating\\EngineInterface',
+            'Symfony\\Component\\Templating\\EngineInterface',
         ));
     }
 
@@ -386,6 +387,7 @@ class FrameworkExtension extends Extension
         $this->addClassesToCompile(array(
             'Symfony\\Component\\HttpFoundation\\Session',
             'Symfony\\Component\\HttpFoundation\\SessionStorage\\SessionStorageInterface',
+            $container->getParameter('session.class'),
         ));
     }
 

+ 1 - 3
src/Symfony/Component/HttpKernel/Kernel.php

@@ -113,9 +113,7 @@ abstract class Kernel implements HttpKernelInterface, \Serializable
             throw new \LogicException('The kernel is already booted.');
         }
 
-        if (!$this->isDebug()) {
-            require_once __DIR__.'/bootstrap.php';
-        }
+        require_once __DIR__.'/bootstrap.php';
 
         $this->bundles = $this->registerBundles();
         $this->bundleDirs = $this->registerBundleDirs();

+ 1 - 1
src/Symfony/Component/HttpKernel/Resources/bin/packager.php

@@ -27,12 +27,12 @@ ClassCollectionLoader::load(array(
     'Symfony\\Component\\HttpKernel\\Bundle\\BundleInterface',
     'Symfony\\Component\\HttpKernel\\Debug\\ErrorHandler',
     'Symfony\\Component\\HttpKernel\\ClassCollectionLoader',
+    'Symfony\\Component\\HttpKernel\\Debug\\ExceptionListener',
 
     'Symfony\\Component\\DependencyInjection\\Container',
     'Symfony\\Component\\DependencyInjection\\ContainerAwareInterface',
     'Symfony\\Component\\DependencyInjection\\ContainerInterface',
     'Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag',
     'Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface',
-    'Symfony\\Component\\DependencyInjection\\TaggedContainerInterface',
 
 ), __DIR__.'/../..', 'bootstrap', false);

+ 61 - 7
src/Symfony/Component/HttpKernel/bootstrap.php

@@ -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
 {
 use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
@@ -382,10 +443,3 @@ interface ParameterBagInterface
     function has($name);
 }
 }
-namespace Symfony\Component\DependencyInjection
-{
-interface TaggedContainerInterface extends ContainerInterface
-{
-    function findTaggedServiceIds($name);
-}
-}