Skip to content

Commit f67b791

Browse files
committed
Route: support for optional [<module>]
1 parent 3510d2c commit f67b791

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

src/Application/Routers/Route.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -238,16 +238,12 @@ public function match(Nette\Http\IRequest $httpRequest)
238238
} elseif (!is_string($params[self::PRESENTER_KEY])) {
239239
return NULL;
240240
}
241-
if (isset($this->metadata[self::MODULE_KEY])) {
242-
if (!isset($params[self::MODULE_KEY])) {
243-
throw new Nette\InvalidStateException('Missing module in route definition.');
244-
}
245-
$presenter = $params[self::MODULE_KEY] . ':' . $params[self::PRESENTER_KEY];
246-
unset($params[self::MODULE_KEY], $params[self::PRESENTER_KEY]);
241+
$presenter = $params[self::PRESENTER_KEY];
242+
unset($params[self::PRESENTER_KEY]);
247243

248-
} else {
249-
$presenter = $params[self::PRESENTER_KEY];
250-
unset($params[self::PRESENTER_KEY]);
244+
if (isset($this->metadata[self::MODULE_KEY])) {
245+
$presenter = (isset($params[self::MODULE_KEY]) ? $params[self::MODULE_KEY] . ':' : '') . $presenter;
246+
unset($params[self::MODULE_KEY]);
251247
}
252248

253249
return new Application\Request(
@@ -292,7 +288,7 @@ public function constructUrl(Application\Request $appRequest, Nette\Http\Url $re
292288
$a = strrpos($presenter, ':');
293289
}
294290
if ($a === FALSE) {
295-
$params[self::MODULE_KEY] = '';
291+
$params[self::MODULE_KEY] = isset($module[self::VALUE]) ? '' : NULL;
296292
} else {
297293
$params[self::MODULE_KEY] = substr($presenter, 0, $a);
298294
$params[self::PRESENTER_KEY] = substr($presenter, $a + 1);

tests/Routers/Route.modules.phpt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,39 @@ testRouteIn($route, '/module.submodule', 'Module:Submodule:Default', [
6666
Assert::null(testRouteOut($route, 'Homepage'));
6767
Assert::same('http://example.com/module/homepage', testRouteOut($route, 'Module:Homepage'));
6868
Assert::same('http://example.com/module.submodule/homepage', testRouteOut($route, 'Module:Submodule:Homepage'));
69+
70+
71+
$route = new Route('[<module>/]<presenter>');
72+
testRouteIn($route, '/home', 'Home', [
73+
'test' => 'testvalue',
74+
], '/home?test=testvalue');
75+
76+
77+
$route = new Route('[<module=Def>/]<presenter>');
78+
testRouteIn($route, '/home', 'Def:Home', [
79+
'test' => 'testvalue',
80+
], '/home?test=testvalue');
81+
82+
83+
$route = new Route('[<module>/]<presenter>');
84+
testRouteIn($route, '/module/home', 'Module:Home', [
85+
'test' => 'testvalue',
86+
], '/module/home?test=testvalue');
87+
88+
89+
$route = new Route('[<module=def>/]<presenter>');
90+
testRouteIn($route, '/module/home', 'Module:Home', [
91+
'test' => 'testvalue',
92+
], '/module/home?test=testvalue');
93+
94+
95+
$route = new Route('[<module>/]<presenter>');
96+
testRouteIn($route, '/module.submodule/home', 'Module:Submodule:Home', [
97+
'test' => 'testvalue',
98+
], '/module.submodule/home?test=testvalue');
99+
100+
101+
$route = new Route('[<module>/]<presenter>');
102+
testRouteIn($route, '/module/submodule.home', 'Module:Submodule:Home', [
103+
'test' => 'testvalue',
104+
], '/module.submodule/home?test=testvalue');

0 commit comments

Comments
 (0)