Browse Source

[HttpKernel] Reworking the HttpException class constructor to be more consistent with normal OO classes. Additionally, the base HttpException constructor was changed to require a code argument as it doesn't make sense to create an exception that will translate into a status code of 0 (in fact it'll cause a strange error).

Ryan Weaver 14 years ago
parent
commit
be94daba66

+ 1 - 1
src/Symfony/Component/HttpKernel/Exception/ForbiddenHttpException.php

@@ -18,7 +18,7 @@ namespace Symfony\Component\HttpKernel\Exception;
  */
 class ForbiddenHttpException extends HttpException
 {
-    public function __construct($message = '', $code = 0, \Exception $previous = null)
+    public function __construct($message = '', \Exception $previous = null)
     {
         if (!$message) {
             $message = 'Forbidden';

+ 9 - 0
src/Symfony/Component/HttpKernel/Exception/HttpException.php

@@ -20,4 +20,13 @@ namespace Symfony\Component\HttpKernel\Exception;
  */
 class HttpException extends \Exception
 {
+    /**
+     * Constructor overridden to require the code, which is the status code.
+     *
+     * @see \Exception
+     */
+    public function __construct($message, $code, \Exception $previous = null)
+    {
+        parent::__construct($message, $code, $previous);
+    }
 }

+ 1 - 1
src/Symfony/Component/HttpKernel/Exception/NotFoundHttpException.php

@@ -18,7 +18,7 @@ namespace Symfony\Component\HttpKernel\Exception;
  */
 class NotFoundHttpException extends HttpException
 {
-    public function __construct($message = '', $code = 0, \Exception $previous = null)
+    public function __construct($message = '', \Exception $previous = null)
     {
         if (!$message) {
             $message = 'Not Found';

+ 1 - 1
src/Symfony/Component/HttpKernel/Exception/UnauthorizedHttpException.php

@@ -18,7 +18,7 @@ namespace Symfony\Component\HttpKernel\Exception;
  */
 class UnauthorizedHttpException extends HttpException
 {
-    public function __construct($message = '', $code = 0, \Exception $previous = null)
+    public function __construct($message = '', \Exception $previous = null)
     {
         if (!$message) {
             $message = 'Unauthorized';

+ 45 - 0
tests/Symfony/Tests/Component/HttpKernel/Exception/FlattenExceptionTest.php

@@ -0,0 +1,45 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Tests\Component\HttpKernel\Exception;
+use Symfony\Component\HttpKernel\Exception\FlattenException;
+
+class FlattenExceptionTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider flattenDataProvider
+     */
+    public function testFlattenHttpException(\Exception $exception, $statusCode)
+    {
+        $flattened = FlattenException::create($exception);
+
+        $this->assertEquals($statusCode, $flattened->getStatusCode(), 'A HttpKernel exception uses the error code as the status code.');
+        $this->assertEquals($exception->getMessage(), $flattened->getMessage(), 'The message is copied from the original exception.');
+        $this->assertEquals($exception->getCode(), $flattened->getCode(), 'The code is copied from the original exception.');
+        $this->assertEquals(get_class($exception), $flattened->getClass(), 'The class is set to the class of the original exception');
+
+    }
+
+    public function flattenDataProvider()
+    {
+        return array(
+            array(new TestHttpException('test', 404), 404),
+            array(new \Exception('test', 123), 500),
+        );
+    }
+}
+
+use Symfony\Component\HttpKernel\Exception\HttpException;
+
+// stub Exception class that extends HttpException
+class TestHttpException extends HttpException
+{
+}