Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

YamlDumper.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 8.79 KiB


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\DependencyInjection\Dumper;
013   
014  use Symfony\Component\Yaml\Dumper as YmlDumper;
015  use Symfony\Component\DependencyInjection\Alias;
016  use Symfony\Component\DependencyInjection\ContainerInterface;
017  use Symfony\Component\DependencyInjection\Definition;
018  use Symfony\Component\DependencyInjection\Parameter;
019  use Symfony\Component\DependencyInjection\Reference;
020  use Symfony\Component\DependencyInjection\Exception\RuntimeException;
021  use Symfony\Component\DependencyInjection\ContainerBuilder;
022   
023  /**
024   * YamlDumper dumps a service container as a YAML string.
025   *
026   * @author Fabien Potencier <fabien@symfony.com>
027   *
028   * @api
029   */
030  class YamlDumper extends Dumper
031  {
032      private $dumper;
033   
034      /**
035       * Constructor.
036       *
037       * @param ContainerBuilder $container The service container to dump
038       *
039       * @api
040       */
041      public function __construct(ContainerBuilder $container)
042      {
043          parent::__construct($container);
044   
045          $this->dumper = new YmlDumper();
046      }
047   
048      /**
049       * Dumps the service container as an YAML string.
050       *
051       * @param array $options An array of options
052       *
053       * @return string A YAML string representing of the service container
054       *
055       * @api
056       */
057      public function dump(array $options = array())
058      {
059          return $this->addParameters()."\n".$this->addServices();
060      }
061   
062      /**
063       * Adds a service
064       *
065       * @param string     $id
066       * @param Definition $definition
067       *
068       * @return string
069       */
070      private function addService($id, $definition)
071      {
072          $code = "    $id:\n";
073          if ($definition->getClass()) {
074              $code .= sprintf("        class: %s\n", $definition->getClass());
075          }
076   
077          if (!$definition->isPublic()) {
078              $code .= "        public: false\n";
079          }
080   
081          $tagsCode = '';
082          foreach ($definition->getTags() as $name => $tags) {
083              foreach ($tags as $attributes) {
084                  $att = array();
085                  foreach ($attributes as $key => $value) {
086                      $att[] = sprintf('%s: %s', $this->dumper->dump($key), $this->dumper->dump($value));
087                  }
088                  $att = $att ? ', '.implode(' ', $att) : '';
089   
090                  $tagsCode .= sprintf("            - { name: %s%s }\n", $this->dumper->dump($name), $att);
091              }
092          }
093          if ($tagsCode) {
094              $code .= "        tags:\n".$tagsCode;
095          }
096   
097          if ($definition->getFile()) {
098              $code .= sprintf("        file: %s\n", $definition->getFile());
099          }
100   
101          if ($definition->isSynthetic()) {
102              $code .= sprintf("        synthetic: true\n");
103          }
104   
105          if ($definition->isSynchronized()) {
106              $code .= sprintf("        synchronized: true\n");
107          }
108   
109          if ($definition->getFactoryClass()) {
110              $code .= sprintf("        factory_class: %s\n", $definition->getFactoryClass());
111          }
112   
113          if ($definition->isLazy()) {
114              $code .= sprintf("        lazy: true\n");
115          }
116   
117          if ($definition->getFactoryMethod()) {
118              $code .= sprintf("        factory_method: %s\n", $definition->getFactoryMethod());
119          }
120   
121          if ($definition->getFactoryService()) {
122              $code .= sprintf("        factory_service: %s\n", $definition->getFactoryService());
123          }
124   
125          if ($definition->getArguments()) {
126              $code .= sprintf("        arguments: %s\n", $this->dumper->dump($this->dumpValue($definition->getArguments()), 0));
127          }
128   
129          if ($definition->getProperties()) {
130              $code .= sprintf("        properties: %s\n", $this->dumper->dump($this->dumpValue($definition->getProperties()), 0));
131          }
132   
133          if ($definition->getMethodCalls()) {
134              $code .= sprintf("        calls:\n%s\n", $this->dumper->dump($this->dumpValue($definition->getMethodCalls()), 1, 12));
135          }
136   
137          if (ContainerInterface::SCOPE_CONTAINER !== $scope = $definition->getScope()) {
138              $code .= sprintf("        scope: %s\n", $scope);
139          }
140   
141          if ($callable = $definition->getConfigurator()) {
142              if (is_array($callable)) {
143                  if ($callable[0] instanceof Reference) {
144                      $callable = array($this->getServiceCall((string) $callable[0], $callable[0]), $callable[1]);
145                  } else {
146                      $callable = array($callable[0], $callable[1]);
147                  }
148              }
149   
150              $code .= sprintf("        configurator: %s\n", $this->dumper->dump($callable, 0));
151          }
152   
153          return $code;
154      }
155   
156      /**
157       * Adds a service alias
158       *
159       * @param string $alias
160       * @param Alias  $id
161       *
162       * @return string
163       */
164      private function addServiceAlias($alias, $id)
165      {
166          if ($id->isPublic()) {
167              return sprintf("    %s: @%s\n", $alias, $id);
168          } else {
169              return sprintf("    %s:\n        alias: %s\n        public: false", $alias, $id);
170          }
171      }
172   
173      /**
174       * Adds services
175       *
176       * @return string
177       */
178      private function addServices()
179      {
180          if (!$this->container->getDefinitions()) {
181              return '';
182          }
183   
184          $code = "services:\n";
185          foreach ($this->container->getDefinitions() as $id => $definition) {
186              $code .= $this->addService($id, $definition);
187          }
188   
189          $aliases = $this->container->getAliases();
190          foreach ($aliases as $alias => $id) {
191              while (isset($aliases[(string) $id])) {
192                  $id = $aliases[(string) $id];
193              }
194              $code .= $this->addServiceAlias($alias, $id);
195          }
196   
197          return $code;
198      }
199   
200      /**
201       * Adds parameters
202       *
203       * @return string
204       */
205      private function addParameters()
206      {
207          if (!$this->container->getParameterBag()->all()) {
208              return '';
209          }
210   
211          $parameters = $this->prepareParameters($this->container->getParameterBag()->all(), $this->container->isFrozen());
212   
213          return $this->dumper->dump(array('parameters' => $parameters), 2);
214      }
215   
216      /**
217       * Dumps the value to YAML format
218       *
219       * @param mixed $value
220       *
221       * @return mixed
222       *
223       * @throws RuntimeException When trying to dump object or resource
224       */
225      private function dumpValue($value)
226      {
227          if (is_array($value)) {
228              $code = array();
229              foreach ($value as $k => $v) {
230                  $code[$k] = $this->dumpValue($v);
231              }
232   
233              return $code;
234          } elseif ($value instanceof Reference) {
235              return $this->getServiceCall((string) $value, $value);
236          } elseif ($value instanceof Parameter) {
237              return $this->getParameterCall((string) $value);
238          } elseif (is_object($value) || is_resource($value)) {
239              throw new RuntimeException('Unable to dump a service container if a parameter is an object or a resource.');
240          }
241   
242          return $value;
243      }
244   
245      /**
246       * Gets the service call.
247       *
248       * @param string    $id
249       * @param Reference $reference
250       *
251       * @return string
252       */
253      private function getServiceCall($id, Reference $reference = null)
254      {
255          if (null !== $reference && ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE !== $reference->getInvalidBehavior()) {
256              return sprintf('@?%s', $id);
257          }
258   
259          return sprintf('@%s', $id);
260      }
261   
262      /**
263       * Gets parameter call.
264       *
265       * @param string $id
266       *
267       * @return string
268       */
269      private function getParameterCall($id)
270      {
271          return sprintf('%%%s%%', $id);
272      }
273   
274      /**
275       * Prepares parameters.
276       *
277       * @param array   $parameters
278       * @param bool    $escape
279       *
280       * @return array
281       */
282      private function prepareParameters($parameters, $escape = true)
283      {
284          $filtered = array();
285          foreach ($parameters as $key => $value) {
286              if (is_array($value)) {
287                  $value = $this->prepareParameters($value, $escape);
288              } elseif ($value instanceof Reference || is_string($value) && 0 === strpos($value, '@')) {
289                  $value = '@'.$value;
290              }
291   
292              $filtered[$key] = $value;
293          }
294   
295          return $escape ? $this->escape($filtered) : $filtered;
296      }
297   
298      /**
299       * Escapes arguments
300       *
301       * @param array $arguments
302       *
303       * @return array
304       */
305      private function escape($arguments)
306      {
307          $args = array();
308          foreach ($arguments as $k => $v) {
309              if (is_array($v)) {
310                  $args[$k] = $this->escape($v);
311              } elseif (is_string($v)) {
312                  $args[$k] = str_replace('%', '%%', $v);
313              } else {
314                  $args[$k] = $v;
315              }
316          }
317   
318          return $args;
319      }
320  }
321