Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\Routing\Matcher\Dumper; Chris@0: Chris@0: /** Chris@0: * Collection of routes. Chris@0: * Chris@0: * @author Arnaud Le Blanc Chris@0: * Chris@0: * @internal Chris@0: */ Chris@0: class DumperCollection implements \IteratorAggregate Chris@0: { Chris@0: /** Chris@0: * @var DumperCollection|null Chris@0: */ Chris@0: private $parent; Chris@0: Chris@0: /** Chris@0: * @var DumperCollection[]|DumperRoute[] Chris@0: */ Chris@17: private $children = []; Chris@0: Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@17: private $attributes = []; Chris@0: Chris@0: /** Chris@0: * Returns the children routes and collections. Chris@0: * Chris@0: * @return self[]|DumperRoute[] Chris@0: */ Chris@0: public function all() Chris@0: { Chris@0: return $this->children; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Adds a route or collection. Chris@0: * Chris@0: * @param DumperRoute|DumperCollection The route or collection Chris@0: */ Chris@0: public function add($child) Chris@0: { Chris@0: if ($child instanceof self) { Chris@0: $child->setParent($this); Chris@0: } Chris@0: $this->children[] = $child; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Sets children. Chris@0: * Chris@0: * @param array $children The children Chris@0: */ Chris@0: public function setAll(array $children) Chris@0: { Chris@0: foreach ($children as $child) { Chris@0: if ($child instanceof self) { Chris@0: $child->setParent($this); Chris@0: } Chris@0: } Chris@0: $this->children = $children; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns an iterator over the children. Chris@0: * Chris@0: * @return \Iterator|DumperCollection[]|DumperRoute[] The iterator Chris@0: */ Chris@0: public function getIterator() Chris@0: { Chris@0: return new \ArrayIterator($this->children); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the root of the collection. Chris@0: * Chris@0: * @return self The root collection Chris@0: */ Chris@0: public function getRoot() Chris@0: { Chris@0: return (null !== $this->parent) ? $this->parent->getRoot() : $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the parent collection. Chris@0: * Chris@0: * @return self|null The parent collection or null if the collection has no parent Chris@0: */ Chris@0: protected function getParent() Chris@0: { Chris@0: return $this->parent; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Sets the parent collection. Chris@0: */ Chris@16: protected function setParent(self $parent) Chris@0: { Chris@0: $this->parent = $parent; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns true if the attribute is defined. Chris@0: * Chris@0: * @param string $name The attribute name Chris@0: * Chris@0: * @return bool true if the attribute is defined, false otherwise Chris@0: */ Chris@0: public function hasAttribute($name) Chris@0: { Chris@18: return \array_key_exists($name, $this->attributes); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns an attribute by name. Chris@0: * Chris@0: * @param string $name The attribute name Chris@0: * @param mixed $default Default value is the attribute doesn't exist Chris@0: * Chris@0: * @return mixed The attribute value Chris@0: */ Chris@0: public function getAttribute($name, $default = null) Chris@0: { Chris@0: return $this->hasAttribute($name) ? $this->attributes[$name] : $default; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Sets an attribute by name. Chris@0: * Chris@0: * @param string $name The attribute name Chris@0: * @param mixed $value The attribute value Chris@0: */ Chris@0: public function setAttribute($name, $value) Chris@0: { Chris@0: $this->attributes[$name] = $value; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Sets multiple attributes. Chris@0: * Chris@0: * @param array $attributes The attributes Chris@0: */ Chris@0: public function setAttributes($attributes) Chris@0: { Chris@0: $this->attributes = $attributes; Chris@0: } Chris@0: }