Browse Source

Merge pull request #16266 from cakephp/5.0-types-fix

Fix types
Mark Story 4 years ago
parent
commit
aa1b4df1d7

+ 2 - 2
src/Error/ErrorHandler.php

@@ -19,9 +19,9 @@ declare(strict_types=1);
 namespace Cake\Error;
 
 use Cake\Core\App;
-use Cake\Http\Response;
 use Cake\Http\ResponseEmitter;
 use Cake\Routing\Router;
+use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;
 use RuntimeException;
 use Throwable;
@@ -203,7 +203,7 @@ class ErrorHandler extends BaseErrorHandler
      * @param \Psr\Http\Message\ResponseInterface|string $response Either the message or response object.
      * @return void
      */
-    protected function _sendResponse(Response|string $response): void
+    protected function _sendResponse(ResponseInterface|string $response): void
     {
         if (is_string($response)) {
             echo $response;

+ 2 - 2
src/Error/ErrorTrap.php

@@ -31,7 +31,7 @@ class ErrorTrap
      *
      * @var array<string, mixed>
      */
-    protected $_defaultConfig = [
+    protected array $_defaultConfig = [
         'errorLevel' => E_ALL,
         'ignoredDeprecationPaths' => [],
         'log' => true,
@@ -49,7 +49,7 @@ class ErrorTrap
      *
      * @var array<\Closure>
      */
-    protected $callbacks = [];
+    protected array $callbacks = [];
 
     /**
      * Constructor

+ 1 - 1
src/Error/ExceptionRenderer.php

@@ -282,7 +282,7 @@ class ExceptionRenderer implements ExceptionRendererInterface
      * @param \Psr\Http\Message\ResponseInterface|string $output The response to output.
      * @return void
      */
-    public function write($output): void
+    public function write(ResponseInterface|string $output): void
     {
         if (is_string($output)) {
             echo $output;

+ 9 - 4
src/Error/ExceptionRendererInterface.php

@@ -20,9 +20,6 @@ use Psr\Http\Message\ResponseInterface;
 
 /**
  * Interface ExceptionRendererInterface
- *
- * @method \Psr\Http\Message\ResponseInterface|string render() Render the exception to a string or Http Response.
- * @method void write(\Psr\Http\Message\ResponseInterface|string $output) Write the output to the output stream.
  */
 interface ExceptionRendererInterface
 {
@@ -31,5 +28,13 @@ interface ExceptionRendererInterface
      *
      * @return \Psr\Http\Message\ResponseInterface The response to be sent.
      */
-    public function render(): ResponseInterface;
+    public function render(): ResponseInterface|string;
+
+    /**
+     * Write the output to the output stream.
+     *
+     * @param \Psr\Http\Message\ResponseInterface|string $output Response instance or string for output.
+     * @return void
+     */
+    public function write(ResponseInterface|string $output): void;
 }

+ 3 - 3
src/Error/ExceptionTrap.php

@@ -38,7 +38,7 @@ class ExceptionTrap
      *
      * @var array<string, mixed>
      */
-    protected $_defaultConfig = [
+    protected array $_defaultConfig = [
         'exceptionRenderer' => ExceptionRenderer::class,
         'logger' => ErrorLogger::class,
         // Used by ConsoleExceptionRenderer (coming soon)
@@ -55,7 +55,7 @@ class ExceptionTrap
      *
      * @var array<\Closure>
      */
-    protected $callbacks = [];
+    protected array $callbacks = [];
 
     /**
      * Constructor
@@ -73,7 +73,7 @@ class ExceptionTrap
      * @param \Throwable $exception Exception to render
      * @return \Cake\Error\ExceptionRendererInterface
      */
-    public function renderer(Throwable $exception)
+    public function renderer(Throwable $exception): ExceptionRendererInterface
     {
         // The return of this method is not defined because
         // the desired interface has bad types that will be changing in 5.x

+ 7 - 8
src/Error/Renderer/TextExceptionRenderer.php

@@ -16,22 +16,21 @@ declare(strict_types=1);
  */
 namespace Cake\Error\Renderer;
 
+use Cake\Error\ExceptionRendererInterface;
+use Psr\Http\Message\ResponseInterface;
 use Throwable;
 
 /**
  * Plain text exception rendering with a stack trace.
  *
  * Useful in CI or plain text environments.
- *
- * @todo 5.0 Implement \Cake\Error\ExceptionRendererInterface. This implementation can't implement
- *  the concrete interface because the return types are not compatible.
  */
-class TextExceptionRenderer
+class TextExceptionRenderer implements ExceptionRendererInterface
 {
     /**
      * @var \Throwable
      */
-    private $error;
+    protected Throwable $error;
 
     /**
      * Constructor.
@@ -48,7 +47,7 @@ class TextExceptionRenderer
      *
      * @return \Psr\Http\Message\ResponseInterface|string
      */
-    public function render()
+    public function render(): ResponseInterface|string
     {
         return sprintf(
             "%s : %s on line %s of %s\nTrace:\n%s",
@@ -63,10 +62,10 @@ class TextExceptionRenderer
     /**
      * Write output to stdout.
      *
-     * @param string $output The output to print.
+     * @param \Psr\Http\Message\ResponseInterface|string $output The output to print.
      * @return void
      */
-    public function write($output): void
+    public function write(ResponseInterface|string $output): void
     {
         echo $output;
     }

+ 0 - 2
tests/TestCase/Error/Middleware/ErrorHandlerMiddlewareTest.php

@@ -93,7 +93,6 @@ class ErrorHandlerMiddlewareTest extends TestCase
             $this->assertInstanceOf('LogicException', $exception);
             $response = new Response();
             $mock = $this->getMockBuilder(ExceptionRendererInterface::class)
-                ->onlyMethods(['render'])
                 ->getMock();
             $mock->expects($this->once())
                 ->method('render')
@@ -318,7 +317,6 @@ class ErrorHandlerMiddlewareTest extends TestCase
 
         $factory = function ($exception) {
             $mock = $this->getMockBuilder(ExceptionRendererInterface::class)
-                ->onlyMethods(['render'])
                 ->getMock();
             $mock->expects($this->once())
                 ->method('render')