Fixed wrong url matching on some paths (issue: #253 - thanks @alejoloe007jb)

This commit is contained in:
Simon Sessingø
2017-08-07 22:18:36 +02:00
parent a5527a0e8c
commit 62f0075cf3
2 changed files with 22 additions and 3 deletions
+8 -3
View File
@@ -34,7 +34,12 @@ abstract class Route implements IRoute
* @var bool * @var bool
*/ */
protected $filterEmptyParams = false; protected $filterEmptyParams = false;
protected $defaultParameterRegex = null;
/**
* Default regular expression used for parsing parameters.
* @var string|null
*/
protected $defaultParameterRegex;
protected $paramModifiers = '{}'; protected $paramModifiers = '{}';
protected $paramOptionalSymbol = '?'; protected $paramOptionalSymbol = '?';
protected $group; protected $group;
@@ -138,7 +143,7 @@ abstract class Route implements IRoute
} }
} }
$regex = sprintf('(?:\/|\-)' . $parameters[2][$key] . '(?P<%s>%s)', $name, $regex) . $parameters[2][$key]; $regex = sprintf('(?:\/|\-)%1$s(?P<%2$s>%3$s)%1$s', $parameters[2][$key], $name, $regex);
} }
@@ -151,7 +156,7 @@ abstract class Route implements IRoute
$urlRegex = preg_quote($route, '/'); $urlRegex = preg_quote($route, '/');
} }
if (preg_match('/^' . $urlRegex . '\/?/', $url, $matches) > 0) { if (preg_match('/^' . $urlRegex . '\/?$/', $url, $matches) > 0) {
$values = []; $values = [];
+14
View File
@@ -8,6 +8,20 @@ require_once 'Helpers/TestRouter.php';
class RouterUrlTest extends PHPUnit_Framework_TestCase class RouterUrlTest extends PHPUnit_Framework_TestCase
{ {
public function testIssue253()
{
TestRouter::get('/', 'DummyController@method1');
TestRouter::get('/page/{id?}', 'DummyController@method1');
TestRouter::debugNoReset('/page/22', 'get');
$this->assertEquals('/page/{id?}/', TestRouter::router()->getRequest()->getLoadedRoute()->getUrl());
TestRouter::debugNoReset('/', 'get');
$this->assertEquals('/', TestRouter::router()->getRequest()->getLoadedRoute()->getUrl());
TestRouter::router()->reset();
}
public function testOptionalParameters() public function testOptionalParameters()
{ {
TestRouter::get('/aviso/legal', 'DummyController@method1'); TestRouter::get('/aviso/legal', 'DummyController@method1');