[Routing] fixed default value for Routes as they can be anything if they don't need to be used as default values for placeholders
This commit is contained in:
parent
dafa4d28d6
commit
9e7cb0a020
@ -120,7 +120,7 @@ class UrlGenerator implements UrlGeneratorInterface
|
|||||||
$optional = true;
|
$optional = true;
|
||||||
foreach ($tokens as $token) {
|
foreach ($tokens as $token) {
|
||||||
if ('variable' === $token[0]) {
|
if ('variable' === $token[0]) {
|
||||||
if (false === $optional || !array_key_exists($token[3], $defaults) || (isset($parameters[$token[3]]) && $parameters[$token[3]] != $defaults[$token[3]])) {
|
if (false === $optional || !array_key_exists($token[3], $defaults) || (isset($parameters[$token[3]]) && (string) $parameters[$token[3]] != (string) $defaults[$token[3]])) {
|
||||||
if (!$isEmpty = in_array($tparams[$token[3]], array(null, '', false), true)) {
|
if (!$isEmpty = in_array($tparams[$token[3]], array(null, '', false), true)) {
|
||||||
// check requirement
|
// check requirement
|
||||||
if ($tparams[$token[3]] && !preg_match('#^'.$token[2].'$#', $tparams[$token[3]])) {
|
if ($tparams[$token[3]] && !preg_match('#^'.$token[2].'$#', $tparams[$token[3]])) {
|
||||||
|
@ -163,7 +163,7 @@ class Route
|
|||||||
{
|
{
|
||||||
$this->defaults = array();
|
$this->defaults = array();
|
||||||
foreach ($defaults as $name => $default) {
|
foreach ($defaults as $name => $default) {
|
||||||
$this->defaults[(string) $name] = (string) $default;
|
$this->defaults[(string) $name] = $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
@ -205,7 +205,7 @@ class Route
|
|||||||
*/
|
*/
|
||||||
public function setDefault($name, $default)
|
public function setDefault($name, $default)
|
||||||
{
|
{
|
||||||
$this->defaults[(string) $name] = (string) $default;
|
$this->defaults[(string) $name] = $default;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,9 @@ class RouteTest extends \PHPUnit_Framework_TestCase
|
|||||||
$route->setDefault('foo2', 'bar2');
|
$route->setDefault('foo2', 'bar2');
|
||||||
$this->assertEquals('bar2', $route->getDefault('foo2'), '->getDefault() return the default value');
|
$this->assertEquals('bar2', $route->getDefault('foo2'), '->getDefault() return the default value');
|
||||||
$this->assertNull($route->getDefault('not_defined'), '->getDefault() return null if default value is not setted');
|
$this->assertNull($route->getDefault('not_defined'), '->getDefault() return null if default value is not setted');
|
||||||
|
|
||||||
|
$route->setDefault('_controller', $closure = function () { return 'Hello'; });
|
||||||
|
$this->assertEquals($closure, $route->getDefault('_controller'), '->setDefault() sets a default value');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRequirements()
|
public function testRequirements()
|
||||||
|
Reference in New Issue
Block a user