Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
PhpGeneratorDumper.php
001 <?php
002
003 /*
004 * This file is part of the Symfony package.
005 *
006 * (c) Fabien Potencier <fabien@symfony.com>
007 *
008 * For the full copyright and license information, please view the LICENSE
009 * file that was distributed with this source code.
010 */
011
012 namespace Symfony\Component\Routing\Generator\Dumper;
013
014 /**
015 * PhpGeneratorDumper creates a PHP class able to generate URLs for a given set of routes.
016 *
017 * @author Fabien Potencier <fabien@symfony.com>
018 * @author Tobias Schultze <http://tobion.de>
019 */
020 class PhpGeneratorDumper extends GeneratorDumper
021 {
022 /**
023 * Dumps a set of routes to a PHP class.
024 *
025 * Available options:
026 *
027 * * class: The class name
028 * * base_class: The base class name
029 *
030 * @param array $options An array of options
031 *
032 * @return string A PHP class representing the generator class
033 */
034 public function dump(array $options = [])
035 {
036 $options = array_merge([
037 'class' => 'ProjectUrlGenerator',
038 'base_class' => 'Symfony\\Component\\Routing\\Generator\\UrlGenerator',
039 ], $options);
040
041 return <<<EOF
042 <?php
043
044 use Symfony\Component\Routing\RequestContext;
045 use Symfony\Component\Routing\Exception\RouteNotFoundException;
046 use Psr\Log\LoggerInterface;
047
048 /**
049 * This class has been auto-generated
050 * by the Symfony Routing Component.
051 */
052 class {$options['class']} extends {$options['base_class']}
053 {
054 private static \$declaredRoutes;
055
056 public function __construct(RequestContext \$context, LoggerInterface \$logger = null)
057 {
058 \$this->context = \$context;
059 \$this->logger = \$logger;
060 if (null === self::\$declaredRoutes) {
061 self::\$declaredRoutes = {$this->generateDeclaredRoutes()};
062 }
063 }
064
065 {$this->generateGenerateMethod()}
066 }
067
068 EOF;
069
070 }
071
072 /**
073 * Generates PHP code representing an array of defined routes
074 * together with the routes properties (e.g. requirements).
075 *
076 * @return string PHP code
077 */
078 private function generateDeclaredRoutes()
079 {
080 $routes = "[\n";
081 foreach ($this->getRoutes()->all() as $name => $route) {
082 $compiledRoute = $route->compile();
083
084 $properties = [];
085 $properties[] = $compiledRoute->getVariables();
086 $properties[] = $route->getDefaults();
087 $properties[] = $route->getRequirements();
088 $properties[] = $compiledRoute->getTokens();
089 $properties[] = $compiledRoute->getHostTokens();
090 $properties[] = $route->getSchemes();
091
092 $routes .= sprintf(" '%s' => %s,\n", $name, str_replace("\n", '', var_export($properties, true)));
093 }
094 $routes .= ' ]';
095
096 return $routes;
097 }
098
099 /**
100 * Generates PHP code representing the `generate` method that implements the UrlGeneratorInterface.
101 *
102 * @return string PHP code
103 */
104 private function generateGenerateMethod()
105 {
106 return <<<'EOF'
107 public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH)
108 {
109 if (!isset(self::$declaredRoutes[$name])) {
110 throw new RouteNotFoundException(sprintf('Unable to generate a URL for the named route "%s" as such route does not exist.', $name));
111 }
112
113 list($variables, $defaults, $requirements, $tokens, $hostTokens, $requiredSchemes) = self::$declaredRoutes[$name];
114
115 return $this->doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, $requiredSchemes);
116 }
117 EOF;
118
119 }
120 }
121