[ Index ]

PHP Cross Reference of phpBB-3.3.7-deutsch

title

Body

[close]

/vendor/symfony/dependency-injection/Compiler/ -> ResolveHotPathPass.php (source)

   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\DependencyInjection\Compiler;
  13  
  14  use Symfony\Component\DependencyInjection\Argument\ArgumentInterface;
  15  use Symfony\Component\DependencyInjection\ContainerBuilder;
  16  use Symfony\Component\DependencyInjection\Definition;
  17  use Symfony\Component\DependencyInjection\Reference;
  18  
  19  /**
  20   * Propagate "container.hot_path" tags to referenced services.
  21   *
  22   * @author Nicolas Grekas <p@tchwork.com>
  23   */
  24  class ResolveHotPathPass extends AbstractRecursivePass
  25  {
  26      private $tagName;
  27      private $resolvedIds = [];
  28  
  29      public function __construct($tagName = 'container.hot_path')
  30      {
  31          $this->tagName = $tagName;
  32      }
  33  
  34      /**
  35       * {@inheritdoc}
  36       */
  37      public function process(ContainerBuilder $container)
  38      {
  39          try {
  40              parent::process($container);
  41              $container->getDefinition('service_container')->clearTag($this->tagName);
  42          } finally {
  43              $this->resolvedIds = [];
  44          }
  45      }
  46  
  47      /**
  48       * {@inheritdoc}
  49       */
  50      protected function processValue($value, $isRoot = false)
  51      {
  52          if ($value instanceof ArgumentInterface) {
  53              return $value;
  54          }
  55          if ($value instanceof Definition && $isRoot && (isset($this->resolvedIds[$this->currentId]) || !$value->hasTag($this->tagName) || $value->isDeprecated())) {
  56              return $value->isDeprecated() ? $value->clearTag($this->tagName) : $value;
  57          }
  58          if ($value instanceof Reference && ContainerBuilder::IGNORE_ON_UNINITIALIZED_REFERENCE !== $value->getInvalidBehavior() && $this->container->has($id = $this->container->normalizeId($value))) {
  59              $definition = $this->container->findDefinition($id);
  60              if (!$definition->hasTag($this->tagName) && !$definition->isDeprecated()) {
  61                  $this->resolvedIds[$id] = true;
  62                  $definition->addTag($this->tagName);
  63                  parent::processValue($definition, false);
  64              }
  65  
  66              return $value;
  67          }
  68  
  69          return parent::processValue($value, $isRoot);
  70      }
  71  }


Generated: Thu Mar 24 21:31:15 2022 Cross-referenced by PHPXref 0.7.1