[Routing] fixed URL generation when a non-optional variable is empty

This commit is contained in:
Fabien Potencier 2011-04-24 13:06:02 +02:00
parent 8eb1dfc6a0
commit 4ed8d4f6b5
2 changed files with 9 additions and 1 deletions

View File

@ -108,7 +108,7 @@ class UrlGenerator implements UrlGeneratorInterface
throw new \InvalidArgumentException(sprintf('Parameter "%s" for route "%s" must match "%s" ("%s" given).', $token[3], $name, $requirements[$token[3]], $tparams[$token[3]]));
}
if (isset($tparams[$token[3]])) {
if ($tparams[$token[3]] || !$optional) {
// %2F is not valid in a URL, so we don't encode it (which is fine as the requirements explicitly allowed it)
$url = $token[1].str_replace('%2F', '/', urlencode($tparams[$token[3]])).$url;
}

View File

@ -74,6 +74,14 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
$this->assertEquals('/app.php/testing', $url);
}
public function testRelativeUrlWithNullParameterButNotOptional()
{
$routes = $this->getRoutes('test', new Route('/testing/{foo}/bar', array('foo' => null)));
$url = $this->getGenerator($routes)->generate('test', array(), false);
$this->assertEquals('/app.php/testing//bar', $url);
}
public function testRelativeUrlWithExtraParameters()
{
$routes = $this->getRoutes('test', new Route('/testing'));