Browse Source

Update HttpApplicationInterface to extends PSR 15's MiddlewareInterface.

ADmad 7 years ago
parent
commit
027e06b643

+ 2 - 17
src/Core/HttpApplicationInterface.php

@@ -16,14 +16,13 @@ namespace Cake\Core;
 
 use Cake\Http\MiddlewareQueue;
 use Cake\Routing\RouteBuilder;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\MiddlewareInterface;
 
 /**
  * An interface defining the methods that the
  * http server depend on.
  */
-interface HttpApplicationInterface
+interface HttpApplicationInterface extends MiddlewareInterface
 {
     /**
      * Load all the application configuration and bootstrap logic.
@@ -51,18 +50,4 @@ interface HttpApplicationInterface
      * @return \Cake\Http\MiddlewareQueue
      */
     public function middleware(MiddlewareQueue $middleware): MiddlewareQueue;
-
-    /**
-     * Invoke the application.
-     *
-     * @param \Psr\Http\Message\ServerRequestInterface $request The request
-     * @param \Psr\Http\Message\ResponseInterface $response The response
-     * @param callable $next The next middleware
-     * @return \Psr\Http\Message\ResponseInterface
-     */
-    public function __invoke(
-        ServerRequestInterface $request,
-        ResponseInterface $response,
-        callable $next
-    ): ResponseInterface;
 }

+ 4 - 1
src/Http/ActionDispatcher.php

@@ -69,8 +69,11 @@ class ActionDispatcher implements EventDispatcherInterface
      * @return \Cake\Http\Response A modified/replaced response.
      * @throws \ReflectionException
      */
-    public function dispatch(ServerRequest $request, Response $response): Response
+    public function dispatch(ServerRequest $request, ?Response $response = null): Response
     {
+        if ($response === null) {
+            $response = new Response();
+        }
         if (Router::getRequest(true) !== $request) {
             Router::pushRequest($request);
         }

+ 5 - 6
src/Http/BaseApplication.php

@@ -31,6 +31,7 @@ use Cake\Routing\Router;
 use InvalidArgumentException;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\RequestHandlerInterface;
 
 /**
  * Base class for application classes.
@@ -233,16 +234,14 @@ abstract class BaseApplication implements
      * - Invoke the controller.
      *
      * @param \Psr\Http\Message\ServerRequestInterface $request The request
-     * @param \Psr\Http\Message\ResponseInterface $response The response
-     * @param callable $next The next middleware
+     * @param \Psr\Http\Message\RequestHandlerInterface $handler The response
      * @return \Psr\Http\Message\ResponseInterface
      */
-    public function __invoke(
+    public function process(
         ServerRequestInterface $request,
-        ResponseInterface $response,
-        callable $next
+        RequestHandlerInterface $handler
     ): ResponseInterface {
-        return $this->getDispatcher()->dispatch($request, $response);
+        return $this->getDispatcher()->dispatch($request);
     }
 
     /**

+ 3 - 6
tests/TestCase/Http/BaseApplicationTest.php

@@ -20,6 +20,7 @@ use Cake\Core\Configure;
 use Cake\Http\BaseApplication;
 use Cake\Http\MiddlewareQueue;
 use Cake\Http\Response;
+use Cake\Http\Runner;
 use Cake\Http\ServerRequestFactory;
 use Cake\Routing\RouteBuilder;
 use Cake\Routing\RouteCollection;
@@ -56,12 +57,8 @@ class BaseApplicationTest extends TestCase
      *
      * @return void
      */
-    public function testInvoke()
+    public function testProcess()
     {
-        $next = function ($req, $res) {
-            return $res;
-        };
-        $response = new Response();
         $request = ServerRequestFactory::fromGlobals(['REQUEST_URI' => '/cakes']);
         $request = $request->withAttribute('params', [
             'controller' => 'Cakes',
@@ -71,7 +68,7 @@ class BaseApplicationTest extends TestCase
         ]);
 
         $app = $this->getMockForAbstractClass(BaseApplication::class, [$this->path]);
-        $result = $app($request, $response, $next);
+        $result = $app->process($request, new Runner());
         $this->assertInstanceOf(ResponseInterface::class, $result);
         $this->assertEquals('Hello Jane', '' . $result->getBody());
     }