Merge pull request #422 from skipperbent/v4-optional-character-fix

Fix for issue #421: Incorrectly optional character in route
This commit is contained in:
Simon Sessingø
2018-08-24 17:23:43 +02:00
committed by GitHub
3 changed files with 325 additions and 368 deletions
+297 -356
View File
File diff suppressed because it is too large Load Diff
+1 -3
View File
@@ -152,8 +152,6 @@ abstract class Route implements IRoute
if (isset($this->where[$name]) === true) {
$regex = $this->where[$name];
} else {
/* If method specific regex is defined use that, otherwise use the default parameter regex */
if ($parameterRegex !== null) {
$regex = $parameterRegex;
} else {
@@ -161,7 +159,7 @@ abstract class Route implements IRoute
}
}
$regex = sprintf('(?:\/|\-)%1$s(?P<%2$s>%3$s)%1$s', $parameters[2][$key], $name, $regex);
$regex = sprintf('((\/|\-)(?P<%2$s>%3$s))%1$s', $parameters[2][$key], $name, $regex);
}
$urlRegex .= preg_quote($t, '/') . $regex;
+20 -2
View File
@@ -6,6 +6,24 @@ require_once 'Dummy/Exception/ExceptionHandlerException.php';
class RouterRouteTest extends \PHPUnit\Framework\TestCase
{
/**
* Issue #421: Incorrectly optional character in route
*
* @throws Exception
*/
public function testOptionalCharacterRoute()
{
$result = false;
TestRouter::get('/api/v1/users/{userid}/projects/{id}/pages/{pageid?}', function () use (&$result) {
$result = true;
});
TestRouter::debug('/api/v1/users/1/projects/8399421535/pages/43/', 'get');
$this->assertTrue($result);
}
public function testMultiParam()
{
$result = false;
@@ -100,7 +118,6 @@ class RouterRouteTest extends \PHPUnit\Framework\TestCase
});
});
TestRouter::debug('/test', 'get');
$this->assertTrue($result);
@@ -133,7 +150,8 @@ class RouterRouteTest extends \PHPUnit\Framework\TestCase
$this->assertTrue(true);
}
public function testParameterDefaultValue() {
public function testParameterDefaultValue()
{
$defaultVariable = null;