annotate vendor/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php @ 2:92f882872392

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