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\Violation; Chris@0: Chris@0: use Symfony\Component\Translation\TranslatorInterface; Chris@0: use Symfony\Component\Validator\Constraint; Chris@0: use Symfony\Component\Validator\ConstraintViolation; Chris@0: use Symfony\Component\Validator\ConstraintViolationList; Chris@0: use Symfony\Component\Validator\Util\PropertyPath; Chris@0: Chris@0: /** Chris@0: * Default implementation of {@link ConstraintViolationBuilderInterface}. Chris@0: * Chris@0: * @author Bernhard Schussek Chris@0: * Chris@14: * @internal since version 2.5. Code against ConstraintViolationBuilderInterface instead. Chris@0: */ Chris@0: class ConstraintViolationBuilder implements ConstraintViolationBuilderInterface Chris@0: { Chris@0: private $violations; Chris@0: private $message; Chris@0: private $parameters; Chris@0: private $root; Chris@0: private $invalidValue; Chris@0: private $propertyPath; Chris@0: private $translator; Chris@0: private $translationDomain; Chris@0: private $plural; Chris@0: private $constraint; Chris@0: private $code; Chris@0: Chris@0: /** Chris@0: * @var mixed Chris@0: */ Chris@0: private $cause; Chris@0: Chris@0: public function __construct(ConstraintViolationList $violations, Constraint $constraint, $message, array $parameters, $root, $propertyPath, $invalidValue, TranslatorInterface $translator, $translationDomain = null) Chris@0: { Chris@0: $this->violations = $violations; Chris@0: $this->message = $message; Chris@0: $this->parameters = $parameters; Chris@0: $this->root = $root; Chris@0: $this->propertyPath = $propertyPath; Chris@0: $this->invalidValue = $invalidValue; Chris@0: $this->translator = $translator; Chris@0: $this->translationDomain = $translationDomain; Chris@0: $this->constraint = $constraint; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function atPath($path) Chris@0: { Chris@0: $this->propertyPath = PropertyPath::append($this->propertyPath, $path); Chris@0: Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setParameter($key, $value) Chris@0: { Chris@0: $this->parameters[$key] = $value; Chris@0: Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setParameters(array $parameters) Chris@0: { Chris@0: $this->parameters = $parameters; Chris@0: Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setTranslationDomain($translationDomain) Chris@0: { Chris@0: $this->translationDomain = $translationDomain; Chris@0: Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setInvalidValue($invalidValue) Chris@0: { Chris@0: $this->invalidValue = $invalidValue; Chris@0: Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setPlural($number) Chris@0: { Chris@0: $this->plural = $number; Chris@0: Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setCode($code) Chris@0: { Chris@0: $this->code = $code; Chris@0: Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function setCause($cause) Chris@0: { Chris@0: $this->cause = $cause; Chris@0: Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function addViolation() Chris@0: { Chris@0: if (null === $this->plural) { Chris@0: $translatedMessage = $this->translator->trans( Chris@0: $this->message, Chris@0: $this->parameters, Chris@0: $this->translationDomain Chris@0: ); Chris@0: } else { Chris@0: try { Chris@0: $translatedMessage = $this->translator->transChoice( Chris@0: $this->message, Chris@0: $this->plural, Chris@0: $this->parameters, Chris@0: $this->translationDomain Chris@0: ); Chris@0: } catch (\InvalidArgumentException $e) { Chris@0: $translatedMessage = $this->translator->trans( Chris@0: $this->message, Chris@0: $this->parameters, Chris@0: $this->translationDomain Chris@0: ); Chris@0: } Chris@0: } Chris@0: Chris@0: $this->violations->add(new ConstraintViolation( Chris@0: $translatedMessage, Chris@0: $this->message, Chris@0: $this->parameters, Chris@0: $this->root, Chris@0: $this->propertyPath, Chris@0: $this->invalidValue, Chris@0: $this->plural, Chris@0: $this->code, Chris@0: $this->constraint, Chris@0: $this->cause Chris@0: )); Chris@0: } Chris@0: }