Browse Source

Merge pull request #8913 from cakephp/app-last

Ensure the app is always last in the middleware stack.
Mark Story 9 years ago
parent
commit
d7c52d579c
3 changed files with 13 additions and 6 deletions
  1. 1 1
      src/Http/BaseApplication.php
  2. 1 1
      src/Http/Server.php
  3. 11 4
      tests/TestCase/Http/ServerTest.php

+ 1 - 1
src/Http/BaseApplication.php

@@ -82,7 +82,7 @@ abstract class BaseApplication
         $cakeResponse = $this->getDispatcher()->dispatch($cakeRequest, $cakeResponse);
 
         // Convert the response back into a PSR7 object.
-        return $next($request, ResponseTransformer::toPsr($cakeResponse));
+        return ResponseTransformer::toPsr($cakeResponse);
     }
 
     /**

+ 1 - 1
src/Http/Server.php

@@ -77,8 +77,8 @@ class Server
         if (!($middleware instanceof MiddlewareStack)) {
             throw new RuntimeException('The application `middleware` method did not return a middleware stack.');
         }
-        $middleware->push($this->app);
         $this->dispatchEvent('Server.buildMiddleware', ['middleware' => $middleware]);
+        $middleware->push($this->app);
         $response = $this->runner->run($middleware, $request, $response);
 
         if (!($response instanceof ResponseInterface)) {

+ 11 - 4
tests/TestCase/Http/ServerTest.php

@@ -179,12 +179,19 @@ class ServerTest extends TestCase
     {
         $app = new MiddlewareApplication($this->config);
         $server = new Server($app);
-        $called = false;
-        $server->eventManager()->on('Server.buildMiddleware', function ($event, $middleware) use (&$called) {
-            $called = true;
+        $this->called = false;
+
+        $server->eventManager()->on('Server.buildMiddleware', function ($event, $middleware) {
             $this->assertInstanceOf('Cake\Http\MiddlewareStack', $middleware);
+            $middleware->push(function ($req, $res, $next) {
+                $this->called = true;
+                return $next($req, $res);
+            });
+            $this->middleware = $middleware;
         });
         $server->run();
-        $this->assertTrue($called, 'Event not triggered.');
+        $this->assertTrue($this->called, 'Middleware added in the event was not triggered.');
+        $this->assertInstanceOf('Closure', $this->middleware->get(3), '2nd last middleware is a closure');
+        $this->assertSame($app, $this->middleware->get(4), 'Last middleware is an app instance');
     }
 }