Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d7a7434

Browse files
committed
[Routing] fix url generation for optional parameter having a null value
1 parent d32c1c0 commit d7a7434

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

src/Symfony/Component/Routing/Generator/UrlGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ protected function doGenerate($variables, $defaults, $requirements, $tokens, $pa
159159
$optional = true;
160160
foreach ($tokens as $token) {
161161
if ('variable' === $token[0]) {
162-
if (!$optional || !array_key_exists($token[3], $defaults) || (string) $mergedParams[$token[3]] !== (string) $defaults[$token[3]]) {
162+
if (!$optional || !array_key_exists($token[3], $defaults) || null !== $mergedParams[$token[3]] && (string) $mergedParams[$token[3]] !== (string) $defaults[$token[3]]) {
163163
// check requirement
164164
if (null !== $this->strictRequirements && !preg_match('#^'.$token[2].'$#', $mergedParams[$token[3]])) {
165165
$message = sprintf('Parameter "%s" for route "%s" must match "%s" ("%s" given) to generate a corresponding URL.', $token[3], $name, $token[2], $mergedParams[$token[3]]);

src/Symfony/Component/Routing/Tests/Generator/UrlGeneratorTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,13 @@ public function testWithAnIntegerAsADefaultValue()
286286
$this->assertEquals('/app.php/foo', $this->getGenerator($routes)->generate('test', array('default' => 'foo')));
287287
}
288288

289+
public function testNullForOptionalParameterIsIgnored()
290+
{
291+
$routes = $this->getRoutes('test', new Route('/test/{default}', array('default' => 0)));
292+
293+
$this->assertEquals('/app.php/test', $this->getGenerator($routes)->generate('test', array('default' => null)));
294+
}
295+
289296
public function testQueryParamSameAsDefault()
290297
{
291298
$routes = $this->getRoutes('test', new Route('/test', array('default' => 'value')));

0 commit comments

Comments
 (0)