From 27a05f4c24333166f940e98ade9376a2be98283b Mon Sep 17 00:00:00 2001 From: Tobias Schultze Date: Thu, 12 Apr 2012 06:16:26 +0200 Subject: [PATCH 1/2] [Routing] small optimization of PhpGeneratorDumper --- .../Generator/Dumper/PhpGeneratorDumper.php | 103 +++++++----------- 1 file changed, 37 insertions(+), 66 deletions(-) diff --git a/src/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php b/src/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php index 0725ca6ecd..8fe58a8d1e 100644 --- a/src/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php +++ b/src/Symfony/Component/Routing/Generator/Dumper/PhpGeneratorDumper.php @@ -43,17 +43,45 @@ class PhpGeneratorDumper extends GeneratorDumper 'base_class' => 'Symfony\\Component\\Routing\\Generator\\UrlGenerator', ), $options); - return - $this->startClass($options['class'], $options['base_class']). - $this->addConstructor(). - $this->addGenerator(). - $this->endClass() - ; + $declaredRouteNames = "array(\n"; + foreach ($this->getRoutes()->all() as $name => $route) { + $declaredRouteNames .= " '$name' => true,\n"; + } + $declaredRouteNames .= ' );'; + + return <<context = \$context; + } + +{$this->addGenerator()} +} + +EOF; } private function addGenerator() { - $methods = array(); + $methods = ''; foreach ($this->getRoutes()->all() as $name => $route) { $compiledRoute = $route->compile(); @@ -64,20 +92,16 @@ class PhpGeneratorDumper extends GeneratorDumper $escapedName = str_replace('.', '__', $name); - $methods[] = <<getRoutes()->all() as $name => $route) { - $routes[] = " '$name' => true,"; - } - $routes = implode("\n", $routes); - - return <<context = \$context; - } - -EOF; - } - - private function endClass() - { - return << Date: Thu, 12 Apr 2012 07:35:08 +0200 Subject: [PATCH 2/2] [Routing] improved generated class by PhpGeneratorDumper --- .../Generator/Dumper/PhpGeneratorDumper.php | 57 ++++++++++--------- 1 file changed, 29 insertions(+), 28 deletions(-) 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; } }