Skip to content

Commit b62d2f5

Browse files
committed
Route: converts all scalar params to strings [Closes #185]
+ fixed conversion of false in default values to string
1 parent 84f6b05 commit b62d2f5

2 files changed

Lines changed: 219 additions & 7 deletions

File tree

src/Application/Routers/Route.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -304,13 +304,11 @@ public function constructUrl(Application\Request $appRequest, Nette\Http\Url $re
304304
continue; // retains null values
305305
}
306306

307-
if (isset($meta['fixity'])) {
308-
if ($params[$name] === false) {
309-
$params[$name] = '0';
310-
} elseif (is_scalar($params[$name])) {
311-
$params[$name] = (string) $params[$name];
312-
}
307+
if (is_scalar($params[$name])) {
308+
$params[$name] = $params[$name] === false ? '0' : (string) $params[$name];
309+
}
313310

311+
if (isset($meta['fixity'])) {
314312
if ($params[$name] === $meta[self::VALUE]) { // remove default values; null values are retain
315313
unset($params[$name]);
316314
continue;
@@ -450,7 +448,7 @@ private function setMask(string $mask, array $metadata): void
450448

451449
if (array_key_exists(self::VALUE, $meta)) {
452450
if (is_scalar($meta[self::VALUE])) {
453-
$metadata[$name][self::VALUE] = (string) $meta[self::VALUE];
451+
$metadata[$name][self::VALUE] = $meta[self::VALUE] === false ? '0' : (string) $meta[self::VALUE];
454452
}
455453
$metadata[$name]['fixity'] = self::CONSTANT;
456454
}
Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\Application\Routers\Route with scalar params
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+
test(function () {
19+
$route = new Route('<presenter>/<param>', [
20+
]);
21+
22+
Assert::same(
23+
'http://example.com/homepage/12',
24+
testRouteOut($route, 'Homepage', ['param' => 12])
25+
);
26+
27+
Assert::same(
28+
'http://example.com/homepage/12.1',
29+
testRouteOut($route, 'Homepage', ['param' => 12.1])
30+
);
31+
32+
Assert::same(
33+
'http://example.com/homepage/0',
34+
testRouteOut($route, 'Homepage', ['param' => false])
35+
);
36+
37+
Assert::same(
38+
'http://example.com/homepage/1',
39+
testRouteOut($route, 'Homepage', ['param' => true])
40+
);
41+
42+
Assert::null(testRouteOut($route, 'Homepage', ['param' => null]));
43+
Assert::null(testRouteOut($route, 'Homepage', ['param' => '']));
44+
});
45+
46+
47+
test(function () {
48+
$route = new Route('<presenter>/<param>', [
49+
'param' => 12,
50+
]);
51+
52+
Assert::same(
53+
'http://example.com/homepage/',
54+
testRouteOut($route, 'Homepage', ['param' => 12])
55+
);
56+
57+
Assert::same(
58+
'http://example.com/homepage/12.1',
59+
testRouteOut($route, 'Homepage', ['param' => 12.1])
60+
);
61+
62+
Assert::same(
63+
'http://example.com/homepage/0',
64+
testRouteOut($route, 'Homepage', ['param' => false])
65+
);
66+
67+
Assert::same(
68+
'http://example.com/homepage/1',
69+
testRouteOut($route, 'Homepage', ['param' => true])
70+
);
71+
72+
Assert::same(
73+
'http://example.com/homepage/',
74+
testRouteOut($route, 'Homepage', ['param' => null])
75+
);
76+
77+
Assert::null(testRouteOut($route, 'Homepage', ['param' => '']));
78+
});
79+
80+
81+
test(function () {
82+
$route = new Route('<presenter>/<param>', [
83+
'param' => 12.1,
84+
]);
85+
86+
Assert::same(
87+
'http://example.com/homepage/12',
88+
testRouteOut($route, 'Homepage', ['param' => 12])
89+
);
90+
91+
Assert::same(
92+
'http://example.com/homepage/',
93+
testRouteOut($route, 'Homepage', ['param' => 12.1])
94+
);
95+
96+
Assert::same(
97+
'http://example.com/homepage/0',
98+
testRouteOut($route, 'Homepage', ['param' => false])
99+
);
100+
101+
Assert::same(
102+
'http://example.com/homepage/1',
103+
testRouteOut($route, 'Homepage', ['param' => true])
104+
);
105+
106+
Assert::same(
107+
'http://example.com/homepage/',
108+
testRouteOut($route, 'Homepage', ['param' => null])
109+
);
110+
111+
Assert::null(testRouteOut($route, 'Homepage', ['param' => '']));
112+
});
113+
114+
115+
test(function () {
116+
$route = new Route('<presenter>/<param>', [
117+
'param' => true,
118+
]);
119+
120+
Assert::same(
121+
'http://example.com/homepage/12',
122+
testRouteOut($route, 'Homepage', ['param' => 12])
123+
);
124+
125+
Assert::same(
126+
'http://example.com/homepage/12.1',
127+
testRouteOut($route, 'Homepage', ['param' => 12.1])
128+
);
129+
130+
Assert::same(
131+
'http://example.com/homepage/0',
132+
testRouteOut($route, 'Homepage', ['param' => false])
133+
);
134+
135+
Assert::same(
136+
'http://example.com/homepage/',
137+
testRouteOut($route, 'Homepage', ['param' => true])
138+
);
139+
140+
Assert::same(
141+
'http://example.com/homepage/',
142+
testRouteOut($route, 'Homepage', ['param' => null])
143+
);
144+
145+
Assert::null(testRouteOut($route, 'Homepage', ['param' => '']));
146+
});
147+
148+
149+
test(function () {
150+
$route = new Route('<presenter>/<param>', [
151+
'param' => false,
152+
]);
153+
154+
Assert::same(
155+
'http://example.com/homepage/12',
156+
testRouteOut($route, 'Homepage', ['param' => 12])
157+
);
158+
159+
Assert::same(
160+
'http://example.com/homepage/12.1',
161+
testRouteOut($route, 'Homepage', ['param' => 12.1])
162+
);
163+
164+
Assert::same(
165+
'http://example.com/homepage/',
166+
testRouteOut($route, 'Homepage', ['param' => false])
167+
);
168+
169+
Assert::same(
170+
'http://example.com/homepage/1',
171+
testRouteOut($route, 'Homepage', ['param' => true])
172+
);
173+
174+
Assert::same(
175+
'http://example.com/homepage/',
176+
testRouteOut($route, 'Homepage', ['param' => null])
177+
);
178+
179+
Assert::null(testRouteOut($route, 'Homepage', ['param' => '']));
180+
});
181+
182+
183+
test(function () {
184+
$route = new Route('<presenter>/<param>', [
185+
'param' => null,
186+
]);
187+
188+
Assert::same(
189+
'http://example.com/homepage/12',
190+
testRouteOut($route, 'Homepage', ['param' => 12])
191+
);
192+
193+
Assert::same(
194+
'http://example.com/homepage/12.1',
195+
testRouteOut($route, 'Homepage', ['param' => 12.1])
196+
);
197+
198+
Assert::same(
199+
'http://example.com/homepage/0',
200+
testRouteOut($route, 'Homepage', ['param' => false])
201+
);
202+
203+
Assert::same(
204+
'http://example.com/homepage/1',
205+
testRouteOut($route, 'Homepage', ['param' => true])
206+
);
207+
208+
Assert::same(
209+
'http://example.com/homepage/',
210+
testRouteOut($route, 'Homepage', ['param' => null])
211+
);
212+
213+
Assert::null(testRouteOut($route, 'Homepage', ['param' => '']));
214+
});

0 commit comments

Comments
 (0)