Skip to content

Commit 37f826f

Browse files
authored
Merge pull request #664 from SunflowerFuchs/v5-development
Fixed Route::setUrl() behavior
2 parents e105f26 + b2851e4 commit 37f826f

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

src/Pecee/SimpleRouter/Route/LoadableRoute.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,16 @@ public function setUrl(string $url): ILoadableRoute
8282
{
8383
$this->url = ($url === '/') ? '/' : '/' . trim($url, '/') . '/';
8484

85+
$parameters = [];
8586
if (strpos($this->url, $this->paramModifiers[0]) !== false) {
8687

8788
$regex = sprintf(static::PARAMETERS_REGEX_FORMAT, $this->paramModifiers[0], $this->paramOptionalSymbol, $this->paramModifiers[1]);
8889

8990
if ((bool)preg_match_all('/' . $regex . '/u', $this->url, $matches) !== false) {
90-
$this->parameters = array_fill_keys($matches[1], null);
91+
$parameters = array_fill_keys($matches[1], null);
9192
}
9293
}
94+
$this->parameters = $parameters;
9395

9496
return $this;
9597
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
use Pecee\Http\Request;
4+
5+
class DummyLoadableRoute extends Pecee\SimpleRouter\Route\LoadableRoute {
6+
7+
public function matchRoute(string $url, Request $request): bool
8+
{
9+
return false;
10+
}
11+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
require_once 'Dummy/Route/DummyLoadableRoute.php';
4+
5+
class LoadableRouteTest extends \PHPUnit\Framework\TestCase
6+
{
7+
public function testSetUrlUpdatesParameters()
8+
{
9+
$route = new DummyLoadableRoute();
10+
$this->assertEmpty($route->getParameters());
11+
12+
$route->setUrl('/');
13+
$this->assertEmpty($route->getParameters());
14+
15+
$expected = ['param' => null, 'optionalParam' => null];
16+
$route->setUrl('/{param}/{optionalParam?}');
17+
$this->assertEquals($expected, $route->getParameters());
18+
19+
$expected = ['otherParam' => null];
20+
$route->setUrl('/{otherParam}');
21+
$this->assertEquals($expected, $route->getParameters());
22+
23+
$expected = [];
24+
$route->setUrl('/');
25+
$this->assertEquals($expected, $route->getParameters());
26+
}
27+
}

0 commit comments

Comments
 (0)