diff --git a/src/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php b/src/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php index 8fe58a8d1e..0edd6e9b65 100644 --- a/src/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php +++ b/src/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php @@ -17,6 +17,7 @@ use Symfony\Component\Routing\Route; * PhpGeneratorDumper creates a PHP class able to generate URLs for a given set of routes. * * @author Fabien Potencier + * @author Tobias Schultze * * @api */ @@ -43,12 +44,6 @@ class PhpGeneratorDumper extends GeneratorDumper 'base_class' => 'Symfony\\Component\\Routing\\Generator\\UrlGenerator', ), $options); - $declaredRouteNames = "array(\n"; - foreach ($this->getRoutes()->all() as $name => $route) { - $declaredRouteNames .= " '$name' => true,\n"; - } - $declaredRouteNames .= ' );'; - return <<generateDeclaredRoutes()}; /** * Constructor. @@ -73,49 +68,55 @@ class {$options['class']} extends {$options['base_class']} \$this->context = \$context; } -{$this->addGenerator()} +{$this->generateGenerateMethod()} } EOF; } - private function addGenerator() + /** + * Generates PHP code representing an array of defined routes + * together with the routes properties (e.g. requirements). + * + * @return string PHP code + */ + private function generateDeclaredRoutes() { - $methods = ''; + $routes = "array(\n"; foreach ($this->getRoutes()->all() as $name => $route) { $compiledRoute = $route->compile(); - $variables = str_replace("\n", '', var_export($compiledRoute->getVariables(), true)); - $defaults = str_replace("\n", '', var_export($compiledRoute->getDefaults(), true)); - $requirements = str_replace("\n", '', var_export($compiledRoute->getRequirements(), true)); - $tokens = str_replace("\n", '', var_export($compiledRoute->getTokens(), true)); + $properties = array(); + $properties[] = $compiledRoute->getVariables(); + $properties[] = $compiledRoute->getDefaults(); + $properties[] = $compiledRoute->getRequirements(); + $properties[] = $compiledRoute->getTokens(); - $escapedName = str_replace('.', '__', $name); + $routes .= sprintf(" '%s' => %s,\n", $name, str_replace("\n", '', var_export($properties, true))); + } + $routes .= ' )'; - $methods .= <<{'get'.\$escapedName.'RouteInfo'}(); + list(\$variables, \$defaults, \$requirements, \$tokens) = self::\$declaredRoutes[\$name]; return \$this->doGenerate(\$variables, \$defaults, \$requirements, \$tokens, \$parameters, \$name, \$absolute); } - -$methods EOF; } }