diff --git a/src/Pecee/SimpleRouter/Route/RouteGroup.php b/src/Pecee/SimpleRouter/Route/RouteGroup.php index bdcf2e8..6520cc8 100644 --- a/src/Pecee/SimpleRouter/Route/RouteGroup.php +++ b/src/Pecee/SimpleRouter/Route/RouteGroup.php @@ -7,6 +7,7 @@ use Pecee\SimpleRouter\Handlers\IExceptionHandler; class RouteGroup extends Route implements IGroupRoute { + protected $urlRegex = '/^%s\/?/u'; protected $prefix; protected $name; protected $domains = []; @@ -55,16 +56,19 @@ class RouteGroup extends Route implements IGroupRoute return false; } - // Parse parameter + // Parse group prefix parameters + if(count($this->originalParameters) === 0) { + $this->parseParameters($this->prefix, $url); + } - $prefix = $this->prefix; + $parsedPrefix = $this->prefix; foreach ($this->getParameters() as $parameter => $value) { - $prefix = str_ireplace('{' . $parameter . '}', $value, $prefix); + $parsedPrefix = str_ireplace('{' . $parameter . '}', $value, $parsedPrefix); } /* Skip if prefix doesn't match */ - if ($this->prefix !== null && stripos($url, $prefix) === false) { + if ($this->prefix !== null && stripos($url, $parsedPrefix) === false) { return false; } diff --git a/src/Pecee/SimpleRouter/Route/RoutePartialGroup.php b/src/Pecee/SimpleRouter/Route/RoutePartialGroup.php index 1e1a51b..9960d29 100644 --- a/src/Pecee/SimpleRouter/Route/RoutePartialGroup.php +++ b/src/Pecee/SimpleRouter/Route/RoutePartialGroup.php @@ -6,14 +6,7 @@ use Pecee\Http\Request; class RoutePartialGroup extends RouteGroup implements IPartialGroupRoute { - - /** - * RoutePartialGroup constructor. - */ - public function __construct() - { - $this->urlRegex = '/^%s\/?/u'; - } + protected $urlRegex = '/^%s\/?/u'; /** * Method called to check if route matches diff --git a/tests/Pecee/SimpleRouter/RouterUrlTest.php b/tests/Pecee/SimpleRouter/RouterUrlTest.php index f9b0d4b..5da97de 100644 --- a/tests/Pecee/SimpleRouter/RouterUrlTest.php +++ b/tests/Pecee/SimpleRouter/RouterUrlTest.php @@ -271,4 +271,41 @@ class RouterUrlTest extends \PHPUnit\Framework\TestCase TestRouter::router()->reset(); } + public function testGroupPrefix() { + + $result = false; + + TestRouter::group(['prefix' => '/lang/{lang}'], function () use(&$result) { + + TestRouter::get('/test', function() use(&$result) { + $result = true; + }); + }); + + TestRouter::debug('/lang/da/test'); + + $this->assertTrue($result); + + // Test group prefix sub-route + + $result = null; + $expectedResult = 28; + + TestRouter::group(['prefix' => '/lang/{lang}'], function () use(&$result, $expectedResult) { + + TestRouter::get('/horse/{horseType}', function($horseType) use(&$result) { + $result = false; + }); + + TestRouter::get('/user/{userId}', function($userId) use(&$result, $expectedResult) { + $result = $userId; + }); + }); + + TestRouter::debug("/lang/da/user/$expectedResult"); + + $this->assertEquals($expectedResult, $result); + + } + } \ No newline at end of file