[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 class RouteGroup extends Route implements IGroupRoute
{ {
protected $urlRegex = '/^%s\/?/u';
protected $prefix; protected $prefix;
protected $name; protected $name;
protected $domains = []; protected $domains = [];
@@ -55,16 +56,19 @@ class RouteGroup extends Route implements IGroupRoute
return false; 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) { foreach ($this->getParameters() as $parameter => $value) {
$prefix = str_ireplace('{' . $parameter . '}', $value, $prefix); $parsedPrefix = str_ireplace('{' . $parameter . '}', $value, $parsedPrefix);
} }
/* Skip if prefix doesn't match */ /* Skip if prefix doesn't match */
if ($this->prefix !== null && stripos($url, $prefix) === false) { if ($this->prefix !== null && stripos($url, $parsedPrefix) === false) {
return false; return false;
} }
@@ -6,14 +6,7 @@ use Pecee\Http\Request;
class RoutePartialGroup extends RouteGroup implements IPartialGroupRoute class RoutePartialGroup extends RouteGroup implements IPartialGroupRoute
{ {
protected $urlRegex = '/^%s\/?/u';
/**
* RoutePartialGroup constructor.
*/
public function __construct()
{
$this->urlRegex = '/^%s\/?/u';
}
/** /**
* Method called to check if route matches * Method called to check if route matches
@@ -271,4 +271,41 @@ class RouterUrlTest extends \PHPUnit\Framework\TestCase
TestRouter::router()->reset(); 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);
}
} }