Ver Fonte

[Routing] fixed default value for Routes as they can be anything if they don't need to be used as default values for placeholders

Fabien Potencier há 14 anos atrás
pai
commit
9e7cb0a020

+ 1 - 1
src/Symfony/Component/Routing/Generator/UrlGenerator.php

@@ -120,7 +120,7 @@ class UrlGenerator implements UrlGeneratorInterface
         $optional = true;
         foreach ($tokens as $token) {
             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)) {
                         // check requirement
                         if ($tparams[$token[3]] && !preg_match('#^'.$token[2].'$#', $tparams[$token[3]])) {

+ 2 - 2
src/Symfony/Component/Routing/Route.php

@@ -163,7 +163,7 @@ class Route
     {
         $this->defaults = array();
         foreach ($defaults as $name => $default) {
-            $this->defaults[(string) $name] = (string) $default;
+            $this->defaults[(string) $name] = $default;
         }
 
         return $this;
@@ -205,7 +205,7 @@ class Route
      */
     public function setDefault($name, $default)
     {
-        $this->defaults[(string) $name] = (string) $default;
+        $this->defaults[(string) $name] = $default;
 
         return $this;
     }

+ 3 - 0
tests/Symfony/Tests/Component/Routing/RouteTest.php

@@ -65,6 +65,9 @@ class RouteTest extends \PHPUnit_Framework_TestCase
         $route->setDefault('foo2', 'bar2');
         $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');
+
+        $route->setDefault('_controller', $closure = function () { return 'Hello'; });
+        $this->assertEquals($closure, $route->getDefault('_controller'), '->setDefault() sets a default value');
     }
 
     public function testRequirements()