Browse Source

Move `Router::$initialized` from `RoutingMiddleware` to `BaseApplication`.

Refs #11357
Robert Pustułka 8 years ago
parent
commit
4498394e1f

+ 6 - 1
src/Http/BaseApplication.php

@@ -17,6 +17,7 @@ namespace Cake\Http;
 use Cake\Core\ConsoleApplicationInterface;
 use Cake\Core\HttpApplicationInterface;
 use Cake\Routing\DispatcherFactory;
+use Cake\Routing\Router;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;
 
@@ -69,7 +70,11 @@ abstract class BaseApplication implements ConsoleApplicationInterface, HttpAppli
      */
     public function routes($routes)
     {
-        require $this->configDir . '/routes.php';
+        if (!Router::$initialized) {
+            require $this->configDir . '/routes.php';
+            // Prevent routes from being loaded again
+            Router::$initialized = true;
+        }
     }
 
     /**

+ 1 - 3
src/Routing/Middleware/RoutingMiddleware.php

@@ -56,11 +56,9 @@ class RoutingMiddleware
      */
     protected function loadRoutes()
     {
-        if ($this->app && !Router::$initialized) {
+        if ($this->app) {
             $builder = Router::createRouteBuilder('/');
             $this->app->routes($builder);
-            // Prevent routes from being loaded again
-            Router::$initialized = true;
         }
     }
 

+ 2 - 1
tests/TestCase/Routing/Middleware/RoutingMiddlewareTest.php

@@ -152,7 +152,8 @@ class RoutingMiddlewareTest extends TestCase
             ];
             $this->assertEquals($expected, $req->getAttribute('params'));
             $this->assertTrue(Router::$initialized, 'Router state should indicate routes loaded');
-            $this->assertCount(1, Router::routes());
+            $this->assertNotEmpty(Router::routes());
+            $this->assertEquals('/app/articles', Router::routes()[0]->template);
         };
         $app = new Application(CONFIG);
         $middleware = new RoutingMiddleware($app);