Skip to content

Commit ada19e8

Browse files
committed
Routers: parameter 'presenter' is validated outside of routers
1 parent 6cc1e56 commit ada19e8

File tree

6 files changed

+15
-16
lines changed

6 files changed

+15
-16
lines changed

src/Application/Application.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,13 @@ public function createInitialRequest(): Request
106106
{
107107
$params = $this->router->match($this->httpRequest);
108108
$presenter = $params[UI\Presenter::PRESENTER_KEY] ?? null;
109-
if ($params === null || $presenter === null) {
109+
110+
if ($params === null || !is_string($presenter)) {
110111
throw new BadRequestException('No route for HTTP request.');
112+
} elseif ($presenter === null) {
113+
throw new Nette\InvalidStateException('Missing presenter in route definition.');
111114
}
115+
112116
unset($params[UI\Presenter::PRESENTER_KEY]);
113117
return new Request(
114118
$presenter,

src/Application/Routers/Route.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -243,14 +243,8 @@ public function match(Nette\Http\IRequest $httpRequest): ?array
243243
}
244244
}
245245

246-
// 5) BUILD Request
247-
if (!isset($params[self::PRESENTER_KEY])) {
248-
throw new Nette\InvalidStateException('Missing presenter in route definition.');
249-
} elseif (!is_string($params[self::PRESENTER_KEY])) {
250-
return null;
251-
}
252-
253-
if (isset($this->metadata[self::MODULE_KEY], $params[self::MODULE_KEY])) {
246+
// 5) PARAMETER MODULE
247+
if (isset($this->metadata[self::MODULE_KEY], $params[self::MODULE_KEY], $params[self::PRESENTER_KEY])) {
254248
$params[self::PRESENTER_KEY] = $params[self::MODULE_KEY] . ':' . $params[self::PRESENTER_KEY];
255249
}
256250
unset($params[self::MODULE_KEY]);

src/Application/Routers/RouteList.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public function match(Nette\Http\IRequest $httpRequest): ?array
4141
$params = $route->match($httpRequest);
4242
if ($params !== null) {
4343
$presenter = $params[self::PRESENTER_KEY] ?? null;
44-
if (strncmp($presenter, 'Nette:', 6)) {
44+
if (is_string($presenter) && strncmp($presenter, 'Nette:', 6)) {
4545
$params[self::PRESENTER_KEY] = $this->module . $presenter;
4646
}
4747
return $params;

src/Application/Routers/SimpleRouter.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,10 @@ public function match(Nette\Http\IRequest $httpRequest): ?array
7070
$params += $this->defaults;
7171

7272
$presenter = $params[self::PRESENTER_KEY] ?? null;
73-
if (!is_string($presenter)) {
74-
return null;
73+
if (is_string($presenter)) {
74+
$params[self::PRESENTER_KEY] = $this->module . $presenter;
7575
}
7676

77-
$params[self::PRESENTER_KEY] = $this->module . $presenter;
7877
return $params;
7978
}
8079

src/Bridges/ApplicationTracy/RoutingPanel.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ private function analyse(Nette\Application\IRouter $router, string $module = '')
111111
} catch (\Exception $e) {
112112
}
113113
if ($params !== null) {
114-
$params['presenter'] = $module . ($params['presenter'] ?? '');
114+
if ($module) {
115+
$params['presenter'] = $module . ($params['presenter'] ?? '');
116+
}
115117
$matched = 'may';
116118
if ($this->matched === null) {
117119
$this->matched = $params;

tests/Routers/SimpleRouter.invalid.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ test(function () {
2222
$httpRequest = new Http\Request($url);
2323
$req = $router->match($httpRequest);
2424

25-
Assert::null($req);
25+
Assert::same(['presenter' => ['foo']], $req);
2626
});
2727

2828
test(function () {
@@ -31,5 +31,5 @@ test(function () {
3131
$httpRequest = new Http\Request($url);
3232
$req = $router->match($httpRequest);
3333

34-
Assert::null($req);
34+
Assert::same([], $req);
3535
});

0 commit comments

Comments
 (0)