[ Index ]

PHP Cross Reference of phpBB-3.1.12-deutsch

title

Body

[close]

/vendor/symfony/routing/Symfony/Component/Routing/Matcher/Dumper/ -> DumperPrefixCollection.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\Routing\Matcher\Dumper;
  13  
  14  /**
  15   * Prefix tree of routes preserving routes order.
  16   *
  17   * @author Arnaud Le Blanc <arnaud.lb@gmail.com>
  18   *
  19   * @internal
  20   */
  21  class DumperPrefixCollection extends DumperCollection
  22  {
  23      /**
  24       * @var string
  25       */
  26      private $prefix = '';
  27  
  28      /**
  29       * Returns the prefix.
  30       *
  31       * @return string The prefix
  32       */
  33      public function getPrefix()
  34      {
  35          return $this->prefix;
  36      }
  37  
  38      /**
  39       * Sets the prefix.
  40       *
  41       * @param string $prefix The prefix
  42       */
  43      public function setPrefix($prefix)
  44      {
  45          $this->prefix = $prefix;
  46      }
  47  
  48      /**
  49       * Adds a route in the tree.
  50       *
  51       * @param DumperRoute $route The route
  52       *
  53       * @return DumperPrefixCollection The node the route was added to
  54       *
  55       * @throws \LogicException
  56       */
  57      public function addPrefixRoute(DumperRoute $route)
  58      {
  59          $prefix = $route->getRoute()->compile()->getStaticPrefix();
  60  
  61          for ($collection = $this; null !== $collection; $collection = $collection->getParent()) {
  62              // Same prefix, add to current leave
  63              if ($collection->prefix === $prefix) {
  64                  $collection->add($route);
  65  
  66                  return $collection;
  67              }
  68  
  69              // Prefix starts with route's prefix
  70              if ('' === $collection->prefix || 0 === strpos($prefix, $collection->prefix)) {
  71                  $child = new self();
  72                  $child->setPrefix(substr($prefix, 0, strlen($collection->prefix) + 1));
  73                  $collection->add($child);
  74  
  75                  return $child->addPrefixRoute($route);
  76              }
  77          }
  78  
  79          // Reached only if the root has a non empty prefix
  80          throw new \LogicException('The collection root must not have a prefix');
  81      }
  82  
  83      /**
  84       * Merges nodes whose prefix ends with a slash.
  85       *
  86       * Children of a node whose prefix ends with a slash are moved to the parent node
  87       */
  88      public function mergeSlashNodes()
  89      {
  90          $children = array();
  91  
  92          foreach ($this as $child) {
  93              if ($child instanceof self) {
  94                  $child->mergeSlashNodes();
  95                  if ('/' === substr($child->prefix, -1)) {
  96                      $children = array_merge($children, $child->all());
  97                  } else {
  98                      $children[] = $child;
  99                  }
 100              } else {
 101                  $children[] = $child;
 102              }
 103          }
 104  
 105          $this->setAll($children);
 106      }
 107  }


Generated: Thu Jan 11 00:25:41 2018 Cross-referenced by PHPXref 0.7.1