Mercurial > hg > isophonics-drupal-site
comparison vendor/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 /* | |
4 * This file is part of the Symfony package. | |
5 * | |
6 * (c) Fabien Potencier <fabien@symfony.com> | |
7 * | |
8 * For the full copyright and license information, please view the LICENSE | |
9 * file that was distributed with this source code. | |
10 */ | |
11 | |
12 namespace Symfony\Component\Routing\Generator\Dumper; | |
13 | |
14 /** | |
15 * PhpGeneratorDumper creates a PHP class able to generate URLs for a given set of routes. | |
16 * | |
17 * @author Fabien Potencier <fabien@symfony.com> | |
18 * @author Tobias Schultze <http://tobion.de> | |
19 */ | |
20 class PhpGeneratorDumper extends GeneratorDumper | |
21 { | |
22 /** | |
23 * Dumps a set of routes to a PHP class. | |
24 * | |
25 * Available options: | |
26 * | |
27 * * class: The class name | |
28 * * base_class: The base class name | |
29 * | |
30 * @param array $options An array of options | |
31 * | |
32 * @return string A PHP class representing the generator class | |
33 */ | |
34 public function dump(array $options = array()) | |
35 { | |
36 $options = array_merge(array( | |
37 'class' => 'ProjectUrlGenerator', | |
38 'base_class' => 'Symfony\\Component\\Routing\\Generator\\UrlGenerator', | |
39 ), $options); | |
40 | |
41 return <<<EOF | |
42 <?php | |
43 | |
44 use Symfony\Component\Routing\RequestContext; | |
45 use Symfony\Component\Routing\Exception\RouteNotFoundException; | |
46 use Psr\Log\LoggerInterface; | |
47 | |
48 /** | |
49 * {$options['class']} | |
50 * | |
51 * This class has been auto-generated | |
52 * by the Symfony Routing Component. | |
53 */ | |
54 class {$options['class']} extends {$options['base_class']} | |
55 { | |
56 private static \$declaredRoutes; | |
57 | |
58 /** | |
59 * Constructor. | |
60 */ | |
61 public function __construct(RequestContext \$context, LoggerInterface \$logger = null) | |
62 { | |
63 \$this->context = \$context; | |
64 \$this->logger = \$logger; | |
65 if (null === self::\$declaredRoutes) { | |
66 self::\$declaredRoutes = {$this->generateDeclaredRoutes()}; | |
67 } | |
68 } | |
69 | |
70 {$this->generateGenerateMethod()} | |
71 } | |
72 | |
73 EOF; | |
74 } | |
75 | |
76 /** | |
77 * Generates PHP code representing an array of defined routes | |
78 * together with the routes properties (e.g. requirements). | |
79 * | |
80 * @return string PHP code | |
81 */ | |
82 private function generateDeclaredRoutes() | |
83 { | |
84 $routes = "array(\n"; | |
85 foreach ($this->getRoutes()->all() as $name => $route) { | |
86 $compiledRoute = $route->compile(); | |
87 | |
88 $properties = array(); | |
89 $properties[] = $compiledRoute->getVariables(); | |
90 $properties[] = $route->getDefaults(); | |
91 $properties[] = $route->getRequirements(); | |
92 $properties[] = $compiledRoute->getTokens(); | |
93 $properties[] = $compiledRoute->getHostTokens(); | |
94 $properties[] = $route->getSchemes(); | |
95 | |
96 $routes .= sprintf(" '%s' => %s,\n", $name, str_replace("\n", '', var_export($properties, true))); | |
97 } | |
98 $routes .= ' )'; | |
99 | |
100 return $routes; | |
101 } | |
102 | |
103 /** | |
104 * Generates PHP code representing the `generate` method that implements the UrlGeneratorInterface. | |
105 * | |
106 * @return string PHP code | |
107 */ | |
108 private function generateGenerateMethod() | |
109 { | |
110 return <<<'EOF' | |
111 public function generate($name, $parameters = array(), $referenceType = self::ABSOLUTE_PATH) | |
112 { | |
113 if (!isset(self::$declaredRoutes[$name])) { | |
114 throw new RouteNotFoundException(sprintf('Unable to generate a URL for the named route "%s" as such route does not exist.', $name)); | |
115 } | |
116 | |
117 list($variables, $defaults, $requirements, $tokens, $hostTokens, $requiredSchemes) = self::$declaredRoutes[$name]; | |
118 | |
119 return $this->doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, $requiredSchemes); | |
120 } | |
121 EOF; | |
122 } | |
123 } |