Skip to content

Commit 84f6b05

Browse files
committed
Route: fixed handling of required parameters with default value
1 parent f0b30ff commit 84f6b05

2 files changed

Lines changed: 49 additions & 5 deletions

File tree

src/Application/Routers/Route.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -570,11 +570,10 @@ private function setMask(string $mask, array $metadata): void
570570
}
571571
$meta['fixity'] = self::PATH_OPTIONAL;
572572

573-
} elseif (!$autoOptional) {
574-
unset($meta['fixity']);
575-
576-
} elseif (isset($meta['fixity'])) { // auto-optional
577-
$re = '(?:' . $re . ')?';
573+
} elseif (isset($meta['fixity'])) {
574+
if ($autoOptional) {
575+
$re = '(?:' . $re . ')?';
576+
}
578577
$meta['fixity'] = self::PATH_OPTIONAL;
579578

580579
} else {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\Application\Routers\Route: required parameter with default value
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Nette\Application\Routers\Route;
10+
use Tester\Assert;
11+
12+
13+
require __DIR__ . '/../bootstrap.php';
14+
15+
require __DIR__ . '/Route.php';
16+
17+
18+
$route = new Route('<presenter>/<default=123>/<required>', [
19+
'action' => 'default',
20+
]);
21+
22+
testRouteIn($route, '/presenter/');
23+
testRouteIn($route, '/presenter/abc');
24+
testRouteIn($route, '/presenter/abc/');
25+
26+
testRouteIn($route, '/presenter/abc/xyy', 'Presenter', [
27+
'default' => 'abc',
28+
'action' => 'default',
29+
'test' => 'testvalue',
30+
'required' => 'xyy',
31+
], '/presenter/abc/xyy?test=testvalue');
32+
33+
34+
Assert::null(testRouteOut($route, 'Homepage'));
35+
Assert::null(testRouteOut($route, 'Homepage', ['default' => 'abc']));
36+
37+
Assert::same(
38+
'http://example.com/homepage/123/xyz',
39+
testRouteOut($route, 'Homepage', ['required' => 'xyz'])
40+
);
41+
42+
Assert::same(
43+
'http://example.com/homepage/abc/xyz',
44+
testRouteOut($route, 'Homepage', ['required' => 'xyz', 'default' => 'abc'])
45+
);

0 commit comments

Comments
 (0)