Browse Source

Add fluent setter for host conditions.

Mark Story 8 years ago
parent
commit
032defcaf2
2 changed files with 37 additions and 0 deletions
  1. 13 0
      src/Routing/Route/Route.php
  2. 24 0
      tests/TestCase/Routing/Route/RouteTest.php

+ 13 - 0
src/Routing/Route/Route.php

@@ -195,6 +195,19 @@ class Route
     }
 
     /**
+     * Set host requirement
+     *
+     * @param string $host The host name this route is bound to
+     * @return $this
+     */
+    public function setHost($host)
+    {
+        $this->options['_host'] = $host;
+
+        return $this;
+    }
+
+    /**
      * Check if a Route has been compiled into a regular expression.
      *
      * @return bool

+ 24 - 0
tests/TestCase/Routing/Route/RouteTest.php

@@ -1574,4 +1574,28 @@ class RouteTest extends TestCase
         $this->assertFalse($route->parse('/reviews/a-b-c/xyz'));
         $this->assertNotEmpty($route->parse('/reviews/2016-05-12/xyz'));
     }
+
+    /**
+     * Test setting host requirements
+     *
+     * @return void
+     */
+    public function testSetHost()
+    {
+        $route = new Route('/reviews', ['controller' => 'Reviews', 'action' => 'index']);
+        $result = $route->setHost('blog.example.com');
+        $this->assertSame($result, $route, 'Should return this');
+
+        $request = new ServerRequest([
+            'environment' => [
+                'HTTP_HOST' => 'a.example.com',
+                'PATH_INFO' => '/reviews'
+            ]
+        ]);
+        $this->assertFalse($route->parseRequest($request));
+
+        $uri = $request->getUri();
+        $request = $request->withUri($uri->withHost('blog.example.com'));
+        $this->assertNotEmpty($route->parseRequest($request));
+    }
 }