Skip to content

Commit ee51b0b

Browse files
artursvondaTobion
authored andcommitted
[Routing] Add matched and default parameters to redirect responses
1 parent e707760 commit ee51b0b

File tree

6 files changed

+218
-115
lines changed

6 files changed

+218
-115
lines changed

src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,32 @@ private function compileRoute(Route $route, $name, $supportsRedirections, $paren
286286
}
287287
}
288288

289+
// optimize parameters array
290+
if ($matches || $hostMatches) {
291+
$vars = array();
292+
if ($hostMatches) {
293+
$vars[] = '$hostMatches';
294+
}
295+
if ($matches) {
296+
$vars[] = '$matches';
297+
}
298+
$vars[] = "array('_route' => '$name')";
299+
300+
$code .= sprintf(
301+
" \$ret = \$this->mergeDefaults(array_replace(%s), %s);\n",
302+
implode(', ', $vars),
303+
str_replace("\n", '', var_export($route->getDefaults(), true))
304+
);
305+
} elseif ($route->getDefaults()) {
306+
$code .= sprintf(" \$ret = %s;\n", str_replace("\n", '', var_export(array_replace($route->getDefaults(), array('_route' => $name)), true)));
307+
} else {
308+
$code .= sprintf(" \$ret = array('_route' => '%s');\n", $name);
309+
}
310+
289311
if ($hasTrailingSlash) {
290312
$code .= <<<EOF
291313
if (substr(\$pathinfo, -1) !== '/') {
292-
return \$this->redirect(\$pathinfo.'/', '$name');
314+
return array_replace(\$ret, \$this->redirect(\$pathinfo.'/', '$name'));
293315
}
294316
295317
@@ -304,34 +326,14 @@ private function compileRoute(Route $route, $name, $supportsRedirections, $paren
304326
$code .= <<<EOF
305327
\$requiredSchemes = $schemes;
306328
if (!isset(\$requiredSchemes[\$this->context->getScheme()])) {
307-
return \$this->redirect(\$pathinfo, '$name', key(\$requiredSchemes));
329+
return array_replace(\$ret, \$this->redirect(\$pathinfo, '$name', key(\$requiredSchemes)));
308330
}
309331
310332
311333
EOF;
312334
}
313335

314-
// optimize parameters array
315-
if ($matches || $hostMatches) {
316-
$vars = array();
317-
if ($hostMatches) {
318-
$vars[] = '$hostMatches';
319-
}
320-
if ($matches) {
321-
$vars[] = '$matches';
322-
}
323-
$vars[] = "array('_route' => '$name')";
324-
325-
$code .= sprintf(
326-
" return \$this->mergeDefaults(array_replace(%s), %s);\n",
327-
implode(', ', $vars),
328-
str_replace("\n", '', var_export($route->getDefaults(), true))
329-
);
330-
} elseif ($route->getDefaults()) {
331-
$code .= sprintf(" return %s;\n", str_replace("\n", '', var_export(array_replace($route->getDefaults(), array('_route' => $name)), true)));
332-
} else {
333-
$code .= sprintf(" return array('_route' => '%s');\n", $name);
334-
}
336+
$code .= " return \$ret;\n";
335337
$code .= " }\n";
336338

337339
if ($methods) {

src/Symfony/Component/Routing/Matcher/UrlMatcher.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,9 @@ protected function matchCollection($pathinfo, RouteCollection $routes)
164164
$status = $this->handleRouteRequirements($pathinfo, $name, $route);
165165

166166
if (self::ROUTE_MATCH === $status[0]) {
167-
return $status[1];
167+
$attributes = array_replace($matches, $hostMatches, (array) $status[1]);
168+
169+
return $this->mergeDefaults($attributes, $route->getDefaults());
168170
}
169171

170172
if (self::REQUIREMENT_MISMATCH === $status[0]) {

0 commit comments

Comments
 (0)