Mercurial > hg > cmmr2012-drupal-site
diff vendor/symfony-cmf/routing/ChainRouteCollection.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/symfony-cmf/routing/ChainRouteCollection.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,272 @@ +<?php + +/* + * This file is part of the Symfony CMF package. + * + * (c) 2011-2015 Symfony CMF + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Cmf\Component\Routing; + +use Symfony\Component\Config\Resource\ResourceInterface; +use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\RouteCollection; + +class ChainRouteCollection extends RouteCollection +{ + /** + * @var RouteCollection[] + */ + private $routeCollections = array(); + + /** + * @var RouteCollection + */ + private $routeCollection; + + public function __clone() + { + foreach ($this->routeCollections as $routeCollection) { + $this->routeCollections[] = clone $routeCollection; + } + } + + /** + * Gets the current RouteCollection as an Iterator that includes all routes. + * + * It implements \IteratorAggregate. + * + * @see all() + * + * @return \ArrayIterator An \ArrayIterator object for iterating over routes + */ + public function getIterator() + { + return new \ArrayIterator($this->all()); + } + + /** + * Gets the number of Routes in this collection. + * + * @return int The number of routes + */ + public function count() + { + $count = 0; + foreach ($this->routeCollections as $routeCollection) { + $count += $routeCollection->count(); + } + + return $count; + } + + /** + * Adds a route. + * + * @param string $name The route name + * @param Route $route A Route instance + */ + public function add($name, Route $route) + { + $this->createInternalCollection(); + $this->routeCollection->add($name, $route); + } + + /** + * Returns all routes in this collection. + * + * @return Route[] An array of routes + */ + public function all() + { + $routeCollectionAll = new RouteCollection(); + foreach ($this->routeCollections as $routeCollection) { + $routeCollectionAll->addCollection($routeCollection); + } + + return $routeCollectionAll->all(); + } + + /** + * Gets a route by name. + * + * @param string $name The route name + * + * @return Route|null A Route instance or null when not found + */ + public function get($name) + { + foreach ($this->routeCollections as $routeCollection) { + $route = $routeCollection->get($name); + if (null !== $route) { + return $route; + } + } + + return; + } + + /** + * Removes a route or an array of routes by name from the collection. + * + * @param string|array $name The route name or an array of route names + */ + public function remove($name) + { + foreach ($this->routeCollections as $routeCollection) { + $route = $routeCollection->get($name); + if (null !== $route) { + $routeCollection->remove($name); + } + } + } + + /** + * Adds a route collection at the end of the current set by appending all + * routes of the added collection. + * + * @param RouteCollection $collection A RouteCollection instance + */ + public function addCollection(RouteCollection $collection) + { + $this->routeCollections[] = $collection; + } + + /** + * Adds a prefix to the path of all child routes. + * + * @param string $prefix An optional prefix to add before each pattern of the route collection + * @param array $defaults An array of default values + * @param array $requirements An array of requirements + */ + public function addPrefix($prefix, array $defaults = array(), array $requirements = array()) + { + $this->createInternalCollection(); + foreach ($this->routeCollections as $routeCollection) { + $routeCollection->addPrefix($prefix, $defaults, $requirements); + } + } + + /** + * Sets the host pattern on all routes. + * + * @param string $pattern The pattern + * @param array $defaults An array of default values + * @param array $requirements An array of requirements + */ + public function setHost($pattern, array $defaults = array(), array $requirements = array()) + { + $this->createInternalCollection(); + foreach ($this->routeCollections as $routeCollection) { + $routeCollection->setHost($pattern, $defaults, $requirements); + } + } + + /** + * Adds defaults to all routes. + * + * An existing default value under the same name in a route will be overridden. + * + * @param array $defaults An array of default values + */ + public function addDefaults(array $defaults) + { + $this->createInternalCollection(); + foreach ($this->routeCollections as $routeCollection) { + $routeCollection->addDefaults($defaults); + } + } + + /** + * Adds requirements to all routes. + * + * An existing requirement under the same name in a route will be overridden. + * + * @param array $requirements An array of requirements + */ + public function addRequirements(array $requirements) + { + $this->createInternalCollection(); + foreach ($this->routeCollections as $routeCollection) { + $routeCollection->addRequirements($requirements); + } + } + + /** + * Adds options to all routes. + * + * An existing option value under the same name in a route will be overridden. + * + * @param array $options An array of options + */ + public function addOptions(array $options) + { + $this->createInternalCollection(); + foreach ($this->routeCollections as $routeCollection) { + $routeCollection->addOptions($options); + } + } + + /** + * Sets the schemes (e.g. 'https') all child routes are restricted to. + * + * @param string|array $schemes The scheme or an array of schemes + */ + public function setSchemes($schemes) + { + $this->createInternalCollection(); + foreach ($this->routeCollections as $routeCollection) { + $routeCollection->setSchemes($schemes); + } + } + + /** + * Sets the HTTP methods (e.g. 'POST') all child routes are restricted to. + * + * @param string|array $methods The method or an array of methods + */ + public function setMethods($methods) + { + $this->createInternalCollection(); + foreach ($this->routeCollections as $routeCollection) { + $routeCollection->setMethods($methods); + } + } + + /** + * Returns an array of resources loaded to build this collection. + * + * @return ResourceInterface[] An array of resources + */ + public function getResources() + { + $resources = array(); + foreach ($this->routeCollections as $routeCollection) { + $resources = array_merge($resources, $routeCollection->getResources()); + } + + return array_unique($resources); + } + + /** + * Adds a resource for this collection. + * + * @param ResourceInterface $resource A resource instance + */ + public function addResource(ResourceInterface $resource) + { + $this->createInternalCollection(); + $this->routeCollection->addResource($resource); + } + + private function createInternalCollection() + { + if (!$this->routeCollection instanceof RouteCollection) { + $this->routeCollection = new RouteCollection(); + $this->routeCollections[] = $this->routeCollection; + } + } +}