diff --git a/src/Pecee/SimpleRouter/Route/Route.php b/src/Pecee/SimpleRouter/Route/Route.php index a8a5c37..401b1d7 100644 --- a/src/Pecee/SimpleRouter/Route/Route.php +++ b/src/Pecee/SimpleRouter/Route/Route.php @@ -123,7 +123,8 @@ abstract class Route implements IRoute ); // Ensures that host names/domains will work with parameters - $url = '/' . ltrim($url, '/'); + + if($route[0] == '{') $url = '/' . ltrim($url, '/'); $urlRegex = ''; $parameters = []; @@ -131,7 +132,7 @@ abstract class Route implements IRoute $urlRegex = preg_quote($route, '/'); } else { - foreach (preg_split('/((-?\/?){[^}]+})/', $route) as $key => $t) { + foreach (preg_split('/((\.?-?\/?){[^}]+})/', $route) as $key => $t) { $regex = ''; @@ -146,7 +147,7 @@ abstract class Route implements IRoute $regex = $parameterRegex ?? $this->defaultParameterRegex ?? static::PARAMETERS_DEFAULT_REGEX; } - $regex = sprintf('((\/|-)(?P<%2$s>%3$s))%1$s', $parameters[2][$key], $name, $regex); + $regex = sprintf('((\/|-|\.)(?P<%2$s>%3$s))%1$s', $parameters[2][$key], $name, $regex); } $urlRegex .= preg_quote($t, '/') . $regex; diff --git a/tests/Pecee/SimpleRouter/RouterRouteTest.php b/tests/Pecee/SimpleRouter/RouterRouteTest.php index 971676a..da16c56 100644 --- a/tests/Pecee/SimpleRouter/RouterRouteTest.php +++ b/tests/Pecee/SimpleRouter/RouterRouteTest.php @@ -175,6 +175,70 @@ class RouterRouteTest extends \PHPUnit\Framework\TestCase TestRouter::debug('/test', 'get'); + $this->assertFalse($result); + + } + + public function testFixedSubdomainDynamicDomain() + { + TestRouter::request()->setHost('other.world.com'); + + $result = false; + + TestRouter::group(['domain' => 'other.{domain}'], function () use (&$result) { + TestRouter::get('/test', function ($domain = null) use (&$result) { + + $result = true; + }); + }); + + TestRouter::debug('/test', 'get'); + + $this->assertTrue($result); + + } + + public function testFixedSubdomainDynamicDomainParameter() + { + TestRouter::request()->setHost('other.world.com'); + + $result = false; + + TestRouter::group(['domain' => 'other.{domain}'], function () use (&$result) { + TestRouter::get('/test', 'DummyController@param'); + TestRouter::get('/test/{key}', 'DummyController@param'); + }); + + $response = TestRouter::debugOutputnoReset('/test', 'get'); + + $this->assertEquals('world.com', $response); + + $response = TestRouter::debugOutput('/test/unittest', 'get'); + + $this->assertEquals('unittest, world.com', $response); + + } + + public function testWrongFixedSubdomainDynamicDomain() + { + TestRouter::request()->setHost('wrong.world.com'); + + $result = false; + + TestRouter::group(['domain' => 'other.{domain}'], function () use (&$result) { + TestRouter::get('/test', function ($domain = null) use (&$result) { + + $result = true; + }); + }); + + try { + TestRouter::debug('/test', 'get'); + } catch(\Exception $e) { + + } + + $this->assertFalse($result); }