Skip to content

Commit f2517cb

Browse files
committed
[Validator] Add new parameter for translation on Length constraint: current value length.
1 parent 12c60c2 commit f2517cb

File tree

3 files changed

+36
-23
lines changed

3 files changed

+36
-23
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ CHANGELOG
1212
* Add the `countUnit` option to the `Length` constraint to allow counting the string length either by code points (like before, now the default setting `Length::COUNT_CODEPOINTS`), bytes (`Length::COUNT_BYTES`) or graphemes (`Length::COUNT_GRAPHEMES`)
1313
* Add the `filenameMaxLength` option to the `File` constraint
1414
* Add the `exclude` option to the `Cascade` constraint
15+
* Add the `value_length` parameter to `Length` constraint
1516

1617
6.2
1718
---

Constraints/LengthValidator.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public function validate(mixed $value, Constraint $constraint)
7777
$this->context->buildViolation($exactlyOptionEnabled ? $constraint->exactMessage : $constraint->maxMessage)
7878
->setParameter('{{ value }}', $this->formatValue($stringValue))
7979
->setParameter('{{ limit }}', $constraint->max)
80+
->setParameter('{{ value_length }}', $length)
8081
->setInvalidValue($value)
8182
->setPlural((int) $constraint->max)
8283
->setCode($exactlyOptionEnabled ? Length::NOT_EQUAL_LENGTH_ERROR : Length::TOO_LONG_ERROR)
@@ -91,6 +92,7 @@ public function validate(mixed $value, Constraint $constraint)
9192
$this->context->buildViolation($exactlyOptionEnabled ? $constraint->exactMessage : $constraint->minMessage)
9293
->setParameter('{{ value }}', $this->formatValue($stringValue))
9394
->setParameter('{{ limit }}', $constraint->min)
95+
->setParameter('{{ value_length }}', $length)
9496
->setInvalidValue($value)
9597
->setPlural((int) $constraint->min)
9698
->setCode($exactlyOptionEnabled ? Length::NOT_EQUAL_LENGTH_ERROR : Length::TOO_SHORT_ERROR)

Tests/Constraints/LengthValidatorTest.php

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public function testEmptyStringIsInvalid()
4040
$this->buildViolation('myMessage')
4141
->setParameter('{{ value }}', '""')
4242
->setParameter('{{ limit }}', $limit)
43+
->setParameter('{{ value_length }}', 0)
4344
->setInvalidValue('')
4445
->setPlural($limit)
4546
->setCode(Length::NOT_EQUAL_LENGTH_ERROR)
@@ -55,14 +56,14 @@ public function testExpectsStringCompatibleType()
5556
public static function getThreeOrLessCharacters()
5657
{
5758
return [
58-
[12],
59-
['12'],
60-
['üü'],
61-
['éé'],
62-
[123],
63-
['123'],
64-
['üüü'],
65-
['ééé'],
59+
[12, 2],
60+
['12', 2],
61+
['üü', 2],
62+
['éé', 2],
63+
[123, 3],
64+
['123', 3],
65+
['üüü', 3],
66+
['ééé', 3],
6667
];
6768
}
6869

@@ -79,14 +80,14 @@ public static function getFourCharacters()
7980
public static function getFiveOrMoreCharacters()
8081
{
8182
return [
82-
[12345],
83-
['12345'],
84-
['üüüüü'],
85-
['ééééé'],
86-
[123456],
87-
['123456'],
88-
['üüüüüü'],
89-
['éééééé'],
83+
[12345, 5],
84+
['12345', 5],
85+
['üüüüü', 5],
86+
['ééééé', 5],
87+
[123456, 6],
88+
['123456', 6],
89+
['üüüüüü', 6],
90+
['éééééé', 6],
9091
];
9192
}
9293

@@ -183,7 +184,7 @@ public function testValidBytesValues()
183184
/**
184185
* @dataProvider getThreeOrLessCharacters
185186
*/
186-
public function testInvalidValuesMin($value)
187+
public function testInvalidValuesMin($value, $valueLength)
187188
{
188189
$constraint = new Length([
189190
'min' => 4,
@@ -195,6 +196,7 @@ public function testInvalidValuesMin($value)
195196
$this->buildViolation('myMessage')
196197
->setParameter('{{ value }}', '"'.$value.'"')
197198
->setParameter('{{ limit }}', 4)
199+
->setParameter('{{ value_length }}', $valueLength)
198200
->setInvalidValue($value)
199201
->setPlural(4)
200202
->setCode(Length::TOO_SHORT_ERROR)
@@ -204,7 +206,7 @@ public function testInvalidValuesMin($value)
204206
/**
205207
* @dataProvider getThreeOrLessCharacters
206208
*/
207-
public function testInvalidValuesMinNamed($value)
209+
public function testInvalidValuesMinNamed($value, $valueLength)
208210
{
209211
$constraint = new Length(min: 4, minMessage: 'myMessage');
210212

@@ -213,6 +215,7 @@ public function testInvalidValuesMinNamed($value)
213215
$this->buildViolation('myMessage')
214216
->setParameter('{{ value }}', '"'.$value.'"')
215217
->setParameter('{{ limit }}', 4)
218+
->setParameter('{{ value_length }}', $valueLength)
216219
->setInvalidValue($value)
217220
->setPlural(4)
218221
->setCode(Length::TOO_SHORT_ERROR)
@@ -222,7 +225,7 @@ public function testInvalidValuesMinNamed($value)
222225
/**
223226
* @dataProvider getFiveOrMoreCharacters
224227
*/
225-
public function testInvalidValuesMax($value)
228+
public function testInvalidValuesMax($value, $valueLength)
226229
{
227230
$constraint = new Length([
228231
'max' => 4,
@@ -234,6 +237,7 @@ public function testInvalidValuesMax($value)
234237
$this->buildViolation('myMessage')
235238
->setParameter('{{ value }}', '"'.$value.'"')
236239
->setParameter('{{ limit }}', 4)
240+
->setParameter('{{ value_length }}', $valueLength)
237241
->setInvalidValue($value)
238242
->setPlural(4)
239243
->setCode(Length::TOO_LONG_ERROR)
@@ -243,7 +247,7 @@ public function testInvalidValuesMax($value)
243247
/**
244248
* @dataProvider getFiveOrMoreCharacters
245249
*/
246-
public function testInvalidValuesMaxNamed($value)
250+
public function testInvalidValuesMaxNamed($value, $valueLength)
247251
{
248252
$constraint = new Length(max: 4, maxMessage: 'myMessage');
249253

@@ -252,6 +256,7 @@ public function testInvalidValuesMaxNamed($value)
252256
$this->buildViolation('myMessage')
253257
->setParameter('{{ value }}', '"'.$value.'"')
254258
->setParameter('{{ limit }}', 4)
259+
->setParameter('{{ value_length }}', $valueLength)
255260
->setInvalidValue($value)
256261
->setPlural(4)
257262
->setCode(Length::TOO_LONG_ERROR)
@@ -261,7 +266,7 @@ public function testInvalidValuesMaxNamed($value)
261266
/**
262267
* @dataProvider getThreeOrLessCharacters
263268
*/
264-
public function testInvalidValuesExactLessThanFour($value)
269+
public function testInvalidValuesExactLessThanFour($value, $valueLength)
265270
{
266271
$constraint = new Length([
267272
'min' => 4,
@@ -274,6 +279,7 @@ public function testInvalidValuesExactLessThanFour($value)
274279
$this->buildViolation('myMessage')
275280
->setParameter('{{ value }}', '"'.$value.'"')
276281
->setParameter('{{ limit }}', 4)
282+
->setParameter('{{ value_length }}', $valueLength)
277283
->setInvalidValue($value)
278284
->setPlural(4)
279285
->setCode(Length::NOT_EQUAL_LENGTH_ERROR)
@@ -283,7 +289,7 @@ public function testInvalidValuesExactLessThanFour($value)
283289
/**
284290
* @dataProvider getThreeOrLessCharacters
285291
*/
286-
public function testInvalidValuesExactLessThanFourNamed($value)
292+
public function testInvalidValuesExactLessThanFourNamed($value, $valueLength)
287293
{
288294
$constraint = new Length(exactly: 4, exactMessage: 'myMessage');
289295

@@ -292,6 +298,7 @@ public function testInvalidValuesExactLessThanFourNamed($value)
292298
$this->buildViolation('myMessage')
293299
->setParameter('{{ value }}', '"'.$value.'"')
294300
->setParameter('{{ limit }}', 4)
301+
->setParameter('{{ value_length }}', $valueLength)
295302
->setInvalidValue($value)
296303
->setPlural(4)
297304
->setCode(Length::NOT_EQUAL_LENGTH_ERROR)
@@ -301,7 +308,7 @@ public function testInvalidValuesExactLessThanFourNamed($value)
301308
/**
302309
* @dataProvider getFiveOrMoreCharacters
303310
*/
304-
public function testInvalidValuesExactMoreThanFour($value)
311+
public function testInvalidValuesExactMoreThanFour($value, $valueLength)
305312
{
306313
$constraint = new Length([
307314
'min' => 4,
@@ -314,6 +321,7 @@ public function testInvalidValuesExactMoreThanFour($value)
314321
$this->buildViolation('myMessage')
315322
->setParameter('{{ value }}', '"'.$value.'"')
316323
->setParameter('{{ limit }}', 4)
324+
->setParameter('{{ value_length }}', $valueLength)
317325
->setInvalidValue($value)
318326
->setPlural(4)
319327
->setCode(Length::NOT_EQUAL_LENGTH_ERROR)
@@ -355,6 +363,7 @@ public function testInvalidValuesExactDefaultCountUnitWithGraphemeInput()
355363
$this->buildViolation('myMessage')
356364
->setParameter('{{ value }}', '"'."A\u{0300}".'"')
357365
->setParameter('{{ limit }}', 1)
366+
->setParameter('{{ value_length }}', 2)
358367
->setInvalidValue("A\u{0300}")
359368
->setPlural(1)
360369
->setCode(Length::NOT_EQUAL_LENGTH_ERROR)
@@ -370,6 +379,7 @@ public function testInvalidValuesExactBytesCountUnitWithGraphemeInput()
370379
$this->buildViolation('myMessage')
371380
->setParameter('{{ value }}', '"'."A\u{0300}".'"')
372381
->setParameter('{{ limit }}', 1)
382+
->setParameter('{{ value_length }}', 3)
373383
->setInvalidValue("A\u{0300}")
374384
->setPlural(1)
375385
->setCode(Length::NOT_EQUAL_LENGTH_ERROR)

0 commit comments

Comments
 (0)