[ Index ] |
PHP Cross Reference of phpBB-3.3.14-deutsch |
[Summary view] [Print] [Text view]
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 = []) 35 { 36 $options = array_merge([ 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 * This class has been auto-generated 50 * by the Symfony Routing Component. 51 */ 52 class {$options['class']} extends {$options['base_class']} 53 { 54 private static \$declaredRoutes; 55 56 public function __construct(RequestContext \$context, LoggerInterface \$logger = null) 57 { 58 \$this->context = \$context; 59 \$this->logger = \$logger; 60 if (null === self::\$declaredRoutes) { 61 self::\$declaredRoutes = {$this->generateDeclaredRoutes()}; 62 } 63 } 64 65 {$this->generateGenerateMethod()} 66 } 67 68 EOF; 69 } 70 71 /** 72 * Generates PHP code representing an array of defined routes 73 * together with the routes properties (e.g. requirements). 74 * 75 * @return string PHP code 76 */ 77 private function generateDeclaredRoutes() 78 { 79 $routes = "[\n"; 80 foreach ($this->getRoutes()->all() as $name => $route) { 81 $compiledRoute = $route->compile(); 82 83 $properties = []; 84 $properties[] = $compiledRoute->getVariables(); 85 $properties[] = $route->getDefaults(); 86 $properties[] = $route->getRequirements(); 87 $properties[] = $compiledRoute->getTokens(); 88 $properties[] = $compiledRoute->getHostTokens(); 89 $properties[] = $route->getSchemes(); 90 91 $routes .= sprintf(" '%s' => %s,\n", $name, str_replace("\n", '', var_export($properties, true))); 92 } 93 $routes .= ' ]'; 94 95 return $routes; 96 } 97 98 /** 99 * Generates PHP code representing the `generate` method that implements the UrlGeneratorInterface. 100 * 101 * @return string PHP code 102 */ 103 private function generateGenerateMethod() 104 { 105 return <<<'EOF' 106 public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH) 107 { 108 if (!isset(self::$declaredRoutes[$name])) { 109 throw new RouteNotFoundException(sprintf('Unable to generate a URL for the named route "%s" as such route does not exist.', $name)); 110 } 111 112 list($variables, $defaults, $requirements, $tokens, $hostTokens, $requiredSchemes) = self::$declaredRoutes[$name]; 113 114 return $this->doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, $requiredSchemes); 115 } 116 EOF; 117 } 118 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Nov 25 19:05:08 2024 | Cross-referenced by PHPXref 0.7.1 |