Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\Validator\Violation;
|
Chris@0
|
13
|
Chris@0
|
14 use Symfony\Component\Translation\TranslatorInterface;
|
Chris@0
|
15 use Symfony\Component\Validator\Constraint;
|
Chris@0
|
16 use Symfony\Component\Validator\ConstraintViolation;
|
Chris@0
|
17 use Symfony\Component\Validator\ConstraintViolationList;
|
Chris@0
|
18 use Symfony\Component\Validator\Util\PropertyPath;
|
Chris@0
|
19
|
Chris@0
|
20 /**
|
Chris@0
|
21 * Default implementation of {@link ConstraintViolationBuilderInterface}.
|
Chris@0
|
22 *
|
Chris@0
|
23 * @author Bernhard Schussek <bschussek@gmail.com>
|
Chris@0
|
24 *
|
Chris@0
|
25 * @internal You should not instantiate or use this class. Code against
|
Chris@0
|
26 * {@link ConstraintViolationBuilderInterface} instead.
|
Chris@0
|
27 */
|
Chris@0
|
28 class ConstraintViolationBuilder implements ConstraintViolationBuilderInterface
|
Chris@0
|
29 {
|
Chris@0
|
30 /**
|
Chris@0
|
31 * @var ConstraintViolationList
|
Chris@0
|
32 */
|
Chris@0
|
33 private $violations;
|
Chris@0
|
34
|
Chris@0
|
35 /**
|
Chris@0
|
36 * @var string
|
Chris@0
|
37 */
|
Chris@0
|
38 private $message;
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * @var array
|
Chris@0
|
42 */
|
Chris@0
|
43 private $parameters;
|
Chris@0
|
44
|
Chris@0
|
45 /**
|
Chris@0
|
46 * @var mixed
|
Chris@0
|
47 */
|
Chris@0
|
48 private $root;
|
Chris@0
|
49
|
Chris@0
|
50 /**
|
Chris@0
|
51 * @var mixed
|
Chris@0
|
52 */
|
Chris@0
|
53 private $invalidValue;
|
Chris@0
|
54
|
Chris@0
|
55 /**
|
Chris@0
|
56 * @var string
|
Chris@0
|
57 */
|
Chris@0
|
58 private $propertyPath;
|
Chris@0
|
59
|
Chris@0
|
60 /**
|
Chris@0
|
61 * @var TranslatorInterface
|
Chris@0
|
62 */
|
Chris@0
|
63 private $translator;
|
Chris@0
|
64
|
Chris@0
|
65 /**
|
Chris@0
|
66 * @var string|null
|
Chris@0
|
67 */
|
Chris@0
|
68 private $translationDomain;
|
Chris@0
|
69
|
Chris@0
|
70 /**
|
Chris@0
|
71 * @var int|null
|
Chris@0
|
72 */
|
Chris@0
|
73 private $plural;
|
Chris@0
|
74
|
Chris@0
|
75 /**
|
Chris@0
|
76 * @var Constraint
|
Chris@0
|
77 */
|
Chris@0
|
78 private $constraint;
|
Chris@0
|
79
|
Chris@0
|
80 /**
|
Chris@0
|
81 * @var mixed
|
Chris@0
|
82 */
|
Chris@0
|
83 private $code;
|
Chris@0
|
84
|
Chris@0
|
85 /**
|
Chris@0
|
86 * @var mixed
|
Chris@0
|
87 */
|
Chris@0
|
88 private $cause;
|
Chris@0
|
89
|
Chris@0
|
90 public function __construct(ConstraintViolationList $violations, Constraint $constraint, $message, array $parameters, $root, $propertyPath, $invalidValue, TranslatorInterface $translator, $translationDomain = null)
|
Chris@0
|
91 {
|
Chris@0
|
92 $this->violations = $violations;
|
Chris@0
|
93 $this->message = $message;
|
Chris@0
|
94 $this->parameters = $parameters;
|
Chris@0
|
95 $this->root = $root;
|
Chris@0
|
96 $this->propertyPath = $propertyPath;
|
Chris@0
|
97 $this->invalidValue = $invalidValue;
|
Chris@0
|
98 $this->translator = $translator;
|
Chris@0
|
99 $this->translationDomain = $translationDomain;
|
Chris@0
|
100 $this->constraint = $constraint;
|
Chris@0
|
101 }
|
Chris@0
|
102
|
Chris@0
|
103 /**
|
Chris@0
|
104 * {@inheritdoc}
|
Chris@0
|
105 */
|
Chris@0
|
106 public function atPath($path)
|
Chris@0
|
107 {
|
Chris@0
|
108 $this->propertyPath = PropertyPath::append($this->propertyPath, $path);
|
Chris@0
|
109
|
Chris@0
|
110 return $this;
|
Chris@0
|
111 }
|
Chris@0
|
112
|
Chris@0
|
113 /**
|
Chris@0
|
114 * {@inheritdoc}
|
Chris@0
|
115 */
|
Chris@0
|
116 public function setParameter($key, $value)
|
Chris@0
|
117 {
|
Chris@0
|
118 $this->parameters[$key] = $value;
|
Chris@0
|
119
|
Chris@0
|
120 return $this;
|
Chris@0
|
121 }
|
Chris@0
|
122
|
Chris@0
|
123 /**
|
Chris@0
|
124 * {@inheritdoc}
|
Chris@0
|
125 */
|
Chris@0
|
126 public function setParameters(array $parameters)
|
Chris@0
|
127 {
|
Chris@0
|
128 $this->parameters = $parameters;
|
Chris@0
|
129
|
Chris@0
|
130 return $this;
|
Chris@0
|
131 }
|
Chris@0
|
132
|
Chris@0
|
133 /**
|
Chris@0
|
134 * {@inheritdoc}
|
Chris@0
|
135 */
|
Chris@0
|
136 public function setTranslationDomain($translationDomain)
|
Chris@0
|
137 {
|
Chris@0
|
138 $this->translationDomain = $translationDomain;
|
Chris@0
|
139
|
Chris@0
|
140 return $this;
|
Chris@0
|
141 }
|
Chris@0
|
142
|
Chris@0
|
143 /**
|
Chris@0
|
144 * {@inheritdoc}
|
Chris@0
|
145 */
|
Chris@0
|
146 public function setInvalidValue($invalidValue)
|
Chris@0
|
147 {
|
Chris@0
|
148 $this->invalidValue = $invalidValue;
|
Chris@0
|
149
|
Chris@0
|
150 return $this;
|
Chris@0
|
151 }
|
Chris@0
|
152
|
Chris@0
|
153 /**
|
Chris@0
|
154 * {@inheritdoc}
|
Chris@0
|
155 */
|
Chris@0
|
156 public function setPlural($number)
|
Chris@0
|
157 {
|
Chris@0
|
158 $this->plural = $number;
|
Chris@0
|
159
|
Chris@0
|
160 return $this;
|
Chris@0
|
161 }
|
Chris@0
|
162
|
Chris@0
|
163 /**
|
Chris@0
|
164 * {@inheritdoc}
|
Chris@0
|
165 */
|
Chris@0
|
166 public function setCode($code)
|
Chris@0
|
167 {
|
Chris@0
|
168 $this->code = $code;
|
Chris@0
|
169
|
Chris@0
|
170 return $this;
|
Chris@0
|
171 }
|
Chris@0
|
172
|
Chris@0
|
173 /**
|
Chris@0
|
174 * {@inheritdoc}
|
Chris@0
|
175 */
|
Chris@0
|
176 public function setCause($cause)
|
Chris@0
|
177 {
|
Chris@0
|
178 $this->cause = $cause;
|
Chris@0
|
179
|
Chris@0
|
180 return $this;
|
Chris@0
|
181 }
|
Chris@0
|
182
|
Chris@0
|
183 /**
|
Chris@0
|
184 * {@inheritdoc}
|
Chris@0
|
185 */
|
Chris@0
|
186 public function addViolation()
|
Chris@0
|
187 {
|
Chris@0
|
188 if (null === $this->plural) {
|
Chris@0
|
189 $translatedMessage = $this->translator->trans(
|
Chris@0
|
190 $this->message,
|
Chris@0
|
191 $this->parameters,
|
Chris@0
|
192 $this->translationDomain
|
Chris@0
|
193 );
|
Chris@0
|
194 } else {
|
Chris@0
|
195 try {
|
Chris@0
|
196 $translatedMessage = $this->translator->transChoice(
|
Chris@0
|
197 $this->message,
|
Chris@0
|
198 $this->plural,
|
Chris@0
|
199 $this->parameters,
|
Chris@0
|
200 $this->translationDomain
|
Chris@0
|
201 );
|
Chris@0
|
202 } catch (\InvalidArgumentException $e) {
|
Chris@0
|
203 $translatedMessage = $this->translator->trans(
|
Chris@0
|
204 $this->message,
|
Chris@0
|
205 $this->parameters,
|
Chris@0
|
206 $this->translationDomain
|
Chris@0
|
207 );
|
Chris@0
|
208 }
|
Chris@0
|
209 }
|
Chris@0
|
210
|
Chris@0
|
211 $this->violations->add(new ConstraintViolation(
|
Chris@0
|
212 $translatedMessage,
|
Chris@0
|
213 $this->message,
|
Chris@0
|
214 $this->parameters,
|
Chris@0
|
215 $this->root,
|
Chris@0
|
216 $this->propertyPath,
|
Chris@0
|
217 $this->invalidValue,
|
Chris@0
|
218 $this->plural,
|
Chris@0
|
219 $this->code,
|
Chris@0
|
220 $this->constraint,
|
Chris@0
|
221 $this->cause
|
Chris@0
|
222 ));
|
Chris@0
|
223 }
|
Chris@0
|
224 }
|