17
17
* PhpGeneratorDumper creates a PHP class able to generate URLs for a given set of routes.
18
18
*
19
19
* @author Fabien Potencier <fabien@symfony.com>
20
+ * @author Tobias Schultze <http://tobion.de>
20
21
*
21
22
* @api
22
23
*/
@@ -43,12 +44,6 @@ public function dump(array $options = array())
43
44
'base_class ' => 'Symfony \\Component \\Routing \\Generator \\UrlGenerator ' ,
44
45
), $ options );
45
46
46
- $ declaredRouteNames = "array( \n" ;
47
- foreach ($ this ->getRoutes ()->all () as $ name => $ route ) {
48
- $ declaredRouteNames .= " ' $ name' => true, \n" ;
49
- }
50
- $ declaredRouteNames .= ' ); ' ;
51
-
52
47
return <<<EOF
53
48
<?php
54
49
@@ -63,7 +58,7 @@ public function dump(array $options = array())
63
58
*/
64
59
class {$ options ['class ' ]} extends {$ options ['base_class ' ]}
65
60
{
66
- static private \$declaredRouteNames = $ declaredRouteNames
61
+ static private \$declaredRoutes = { $ this -> generateDeclaredRoutes ()} ;
67
62
68
63
/**
69
64
* Constructor.
@@ -73,49 +68,55 @@ public function __construct(RequestContext \$context)
73
68
\$this->context = \$context;
74
69
}
75
70
76
- {$ this ->addGenerator ()}
71
+ {$ this ->generateGenerateMethod ()}
77
72
}
78
73
79
74
EOF ;
80
75
}
81
76
82
- private function addGenerator ()
77
+ /**
78
+ * Generates PHP code representing an array of defined routes
79
+ * together with the routes properties (e.g. requirements).
80
+ *
81
+ * @return string PHP code
82
+ */
83
+ private function generateDeclaredRoutes ()
83
84
{
84
- $ methods = '' ;
85
+ $ routes = " array( \n" ;
85
86
foreach ($ this ->getRoutes ()->all () as $ name => $ route ) {
86
87
$ compiledRoute = $ route ->compile ();
87
88
88
- $ variables = str_replace ("\n" , '' , var_export ($ compiledRoute ->getVariables (), true ));
89
- $ defaults = str_replace ("\n" , '' , var_export ($ compiledRoute ->getDefaults (), true ));
90
- $ requirements = str_replace ("\n" , '' , var_export ($ compiledRoute ->getRequirements (), true ));
91
- $ tokens = str_replace ("\n" , '' , var_export ($ compiledRoute ->getTokens (), true ));
89
+ $ properties = array ();
90
+ $ properties [] = $ compiledRoute ->getVariables ();
91
+ $ properties [] = $ compiledRoute ->getDefaults ();
92
+ $ properties [] = $ compiledRoute ->getRequirements ();
93
+ $ properties [] = $ compiledRoute ->getTokens ();
92
94
93
- $ escapedName = str_replace ('. ' , '__ ' , $ name );
95
+ $ routes .= sprintf (" '%s' => %s, \n" , $ name , str_replace ("\n" , '' , var_export ($ properties , true )));
96
+ }
97
+ $ routes .= ' ) ' ;
94
98
95
- $ methods .= <<<EOF
96
- private function get {$ escapedName }RouteInfo()
97
- {
98
- return array( $ variables, $ defaults, $ requirements, $ tokens);
99
+ return $ routes ;
99
100
}
100
101
101
- EOF ;
102
- }
103
-
102
+ /**
103
+ * Generates PHP code representing the `generate` method that implements the UrlGeneratorInterface.
104
+ *
105
+ * @return string PHP code
106
+ */
107
+ private function generateGenerateMethod ()
108
+ {
104
109
return <<<EOF
105
110
public function generate( \$name, \$parameters = array(), \$absolute = false)
106
111
{
107
- if (!isset(self:: \$declaredRouteNames [ \$name])) {
112
+ if (!isset(self:: \$declaredRoutes [ \$name])) {
108
113
throw new RouteNotFoundException(sprintf('Route "%s" does not exist.', \$name));
109
114
}
110
115
111
- \$escapedName = str_replace('.', '__', \$name);
112
-
113
- list( \$variables, \$defaults, \$requirements, \$tokens) = \$this->{'get'. \$escapedName.'RouteInfo'}();
116
+ list( \$variables, \$defaults, \$requirements, \$tokens) = self:: \$declaredRoutes[ \$name];
114
117
115
118
return \$this->doGenerate( \$variables, \$defaults, \$requirements, \$tokens, \$parameters, \$name, \$absolute);
116
119
}
117
-
118
- $ methods
119
120
EOF ;
120
121
}
121
122
}
0 commit comments