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\Validator; Chris@0: Chris@0: /** Chris@0: * Default implementation of {@ConstraintViolationListInterface}. Chris@0: * Chris@0: * @author Bernhard Schussek Chris@0: */ Chris@0: class ConstraintViolationList implements \IteratorAggregate, ConstraintViolationListInterface Chris@0: { Chris@0: /** Chris@0: * @var ConstraintViolationInterface[] Chris@0: */ Chris@17: private $violations = []; Chris@0: Chris@0: /** Chris@0: * Creates a new constraint violation list. Chris@0: * Chris@0: * @param ConstraintViolationInterface[] $violations The constraint violations to add to the list Chris@0: */ Chris@17: public function __construct(array $violations = []) Chris@0: { Chris@0: foreach ($violations as $violation) { Chris@0: $this->add($violation); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Converts the violation into a string for debugging purposes. Chris@0: * Chris@0: * @return string The violation as string Chris@0: */ Chris@0: public function __toString() Chris@0: { Chris@0: $string = ''; Chris@0: Chris@0: foreach ($this->violations as $violation) { Chris@0: $string .= $violation."\n"; Chris@0: } Chris@0: Chris@0: return $string; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function add(ConstraintViolationInterface $violation) Chris@0: { Chris@0: $this->violations[] = $violation; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function addAll(ConstraintViolationListInterface $otherList) Chris@0: { Chris@0: foreach ($otherList as $violation) { Chris@0: $this->violations[] = $violation; Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function get($offset) Chris@0: { Chris@0: if (!isset($this->violations[$offset])) { Chris@0: throw new \OutOfBoundsException(sprintf('The offset "%s" does not exist.', $offset)); Chris@0: } Chris@0: Chris@0: return $this->violations[$offset]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function has($offset) Chris@0: { Chris@0: return isset($this->violations[$offset]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function set($offset, ConstraintViolationInterface $violation) Chris@0: { Chris@0: $this->violations[$offset] = $violation; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function remove($offset) Chris@0: { Chris@0: unset($this->violations[$offset]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: * Chris@0: * @return \ArrayIterator|ConstraintViolationInterface[] Chris@0: */ Chris@0: public function getIterator() Chris@0: { Chris@0: return new \ArrayIterator($this->violations); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function count() Chris@0: { Chris@17: return \count($this->violations); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function offsetExists($offset) Chris@0: { Chris@0: return $this->has($offset); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function offsetGet($offset) Chris@0: { Chris@0: return $this->get($offset); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function offsetSet($offset, $violation) Chris@0: { Chris@0: if (null === $offset) { Chris@0: $this->add($violation); Chris@0: } else { Chris@0: $this->set($offset, $violation); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function offsetUnset($offset) Chris@0: { Chris@0: $this->remove($offset); Chris@0: } Chris@14: Chris@14: /** Chris@14: * Creates iterator for errors with specific codes. Chris@14: * Chris@14: * @param string|string[] $codes The codes to find Chris@14: * Chris@14: * @return static new instance which contains only specific errors Chris@14: */ Chris@14: public function findByCodes($codes) Chris@14: { Chris@14: $codes = (array) $codes; Chris@17: $violations = []; Chris@14: foreach ($this as $violation) { Chris@17: if (\in_array($violation->getCode(), $codes, true)) { Chris@14: $violations[] = $violation; Chris@14: } Chris@14: } Chris@14: Chris@14: return new static($violations); Chris@14: } Chris@0: }