diff --git a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php index 512ab08b92..42b70b353c 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php @@ -62,15 +62,9 @@ class ExceptionListener implements EventSubscriberInterface $logger = $this->logger instanceof DebugLoggerInterface ? $this->logger : null; - $flattenException = FlattenException::create($exception); - if ($exception instanceof HttpExceptionInterface) { - $flattenException->setStatusCode($exception->getStatusCode()); - $flattenException->setHeaders($exception->getHeaders()); - } - $attributes = array( '_controller' => $this->controller, - 'exception' => $flattenException, + 'exception' => FlattenException::create($exception), 'logger' => $logger, 'format' => $request->getRequestFormat(), ); diff --git a/src/Symfony/Component/HttpKernel/Exception/FlattenException.php b/src/Symfony/Component/HttpKernel/Exception/FlattenException.php index 46aba787a9..b2ffb9fcfb 100644 --- a/src/Symfony/Component/HttpKernel/Exception/FlattenException.php +++ b/src/Symfony/Component/HttpKernel/Exception/FlattenException.php @@ -36,8 +36,13 @@ class FlattenException $e->setMessage($exception->getMessage()); $e->setCode($exception->getCode()); + if ($exception instanceof HttpExceptionInterface) { + $statusCode = $exception->getStatusCode(); + $headers = array_merge($headers, $exception->getHeaders()); + } + if (null === $statusCode) { - $statusCode = $exception instanceof HttpExceptionInterface ? $exception->getStatusCode() : 500; + $statusCode = 500; } $e->setStatusCode($statusCode); diff --git a/src/Symfony/Component/HttpKernel/Tests/Exception/FlattenExceptionTest.php b/src/Symfony/Component/HttpKernel/Tests/Exception/FlattenExceptionTest.php index a1ddda759b..65975aa96f 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Exception/FlattenExceptionTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Exception/FlattenExceptionTest.php @@ -13,6 +13,7 @@ namespace Symfony\Component\HttpKernel\Tests\Exception; use Symfony\Component\HttpKernel\Exception\FlattenException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; class FlattenExceptionTest extends \PHPUnit_Framework_TestCase { @@ -28,6 +29,12 @@ class FlattenExceptionTest extends \PHPUnit_Framework_TestCase $this->assertEquals('404', $flattened->getStatusCode()); } + public function testHeadersForHttpException() + { + $flattened = FlattenException::create(new MethodNotAllowedHttpException(array('POST'))); + $this->assertEquals(array('Allow' => 'POST'), $flattened->getHeaders()); + } + /** * @dataProvider flattenDataProvider */