Merge pull request #539 from flightphp/route-group-fix

fixed bug with grouped routes
pull/542/head v3.4.1
fadrian06 12 months ago committed by GitHub
commit 8bec3658b0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -46,6 +46,13 @@ class Router
*/
protected array $group_middlewares = [];
/**
* Allowed HTTP methods
*
* @var array<int, string>
*/
protected array $allowed_methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
/**
* Gets mapped routes.
*
@ -74,7 +81,19 @@ class Router
*/
public function map(string $pattern, callable $callback, bool $pass_route = false, string $route_alias = ''): Route
{
$url = trim($pattern);
// This means that the route ies defined in a group, but the defined route is the base
// url path. Note the '' in route()
// Ex: Flight::group('/api', function() {
// Flight::route('', function() {});
// }
// Keep the space so that it can execute the below code normally
if ($this->group_prefix !== '') {
$url = ltrim($pattern);
} else {
$url = trim($pattern);
}
$methods = ['*'];
if (false !== strpos($url, ' ')) {
@ -83,7 +102,12 @@ class Router
$methods = explode('|', $method);
}
$route = new Route($this->group_prefix . $url, $callback, $methods, $pass_route, $route_alias);
// And this finishes it off.
if ($this->group_prefix !== '') {
$url = rtrim($this->group_prefix . $url);
}
$route = new Route($url, $callback, $methods, $pass_route, $route_alias);
// to handle group middleware
foreach ($this->group_middlewares as $gm) {

@ -459,6 +459,41 @@ class RouterTest extends TestCase
$this->check('123');
}
public function testGroupRouteWithEmptyMapPath()
{
$this->router->group('/user', function (Router $router) {
$router->map('', function () {
echo "I'm a little teapot";
});
});
$this->request->url = '/user';
$this->check('I\'m a little teapot');
}
public function testGroupRouteWithEmptyGetPath()
{
$this->router->group('/user', function (Router $router) {
$router->get('', function () {
echo "I'm a little teapot";
});
});
$this->request->url = '/user';
$this->request->method = 'GET';
$this->check('I\'m a little teapot');
}
public function testGroupRouteWithEmptyMultipleMethodsPath()
{
$this->router->group('/user', function (Router $router) {
$router->map('GET|POST ', function () {
echo "I'm a little teapot";
});
});
$this->request->url = '/user';
$this->request->method = 'GET';
$this->check('I\'m a little teapot');
}
public function testGroupRoutesMultiParams()
{
$this->router->group('/user', function (Router $router) {

Loading…
Cancel
Save