[FEATURE] Added support for parameters in group prefix.

This commit is contained in:
Simon Sessingø
2021-03-29 16:56:37 +02:00
parent d6bc713e5b
commit b05bbccc28
3 changed files with 46 additions and 12 deletions
+8 -4
View File
@@ -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;
}
@@ -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
@@ -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);
}
}