Skip to content

Commit 031c55b

Browse files
committed
Merge branch '6.4' into 7.0
* 6.4: [Messenger] Fix using negative delay [Validator] Add missing italian translation [Validator] Fix using known option names as field names [SecurityBundle] Prevent to login/logout without a request context Suppress warnings from is_executable
2 parents 2d0ee15 + 184c085 commit 031c55b

File tree

3 files changed

+57
-2
lines changed

3 files changed

+57
-2
lines changed

Constraints/Collection.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Component\Validator\Constraints;
1313

14+
use Symfony\Component\Validator\Constraint;
15+
1416
/**
1517
* @author Bernhard Schussek <[email protected]>
1618
*/
@@ -33,9 +35,10 @@ class Collection extends Composite
3335

3436
public function __construct(array $fields = null, array $groups = null, mixed $payload = null, bool $allowExtraFields = null, bool $allowMissingFields = null, string $extraFieldsMessage = null, string $missingFieldsMessage = null)
3537
{
36-
// no known options set? $fields is the fields array
3738
if (\is_array($fields)
38-
&& !array_intersect(array_keys($fields), ['groups', 'fields', 'allowExtraFields', 'allowMissingFields', 'extraFieldsMessage', 'missingFieldsMessage'])) {
39+
&& (($firstField = reset($fields)) instanceof Constraint
40+
|| ($firstField[0] ?? null) instanceof Constraint
41+
)) {
3942
$fields = ['fields' => $fields];
4043
}
4144

Resources/translations/validators.it.xlf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,10 @@
426426
<source>Using hidden overlay characters is not allowed.</source>
427427
<target>Non è consentito utilizzare caratteri sovrapposti nascosti.</target>
428428
</trans-unit>
429+
<trans-unit id="110">
430+
<source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
431+
<target>L'estensione del file non è valida ({{ extension }}). Le estensioni consentite sono {{ extensions }}.</target>
432+
</trans-unit>
429433
</body>
430434
</file>
431435
</xliff>

Tests/Constraints/CollectionTest.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,21 @@
1818
use Symfony\Component\Validator\Constraints\Required;
1919
use Symfony\Component\Validator\Constraints\Valid;
2020
use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
21+
use Symfony\Component\Validator\Exception\InvalidOptionsException;
2122

2223
/**
2324
* @author Bernhard Schussek <[email protected]>
2425
*/
2526
class CollectionTest extends TestCase
2627
{
28+
public function testRejectNonConstraints()
29+
{
30+
$this->expectException(InvalidOptionsException::class);
31+
new Collection([
32+
'foo' => 'bar',
33+
]);
34+
}
35+
2736
public function testRejectValidConstraint()
2837
{
2938
$this->expectException(ConstraintDefinitionException::class);
@@ -97,4 +106,43 @@ public function testConstraintHasDefaultGroupWithOptionalValues()
97106
$this->assertEquals(['Default'], $constraint->fields['foo']->groups);
98107
$this->assertEquals(['Default'], $constraint->fields['bar']->groups);
99108
}
109+
110+
public function testOnlySomeKeysAreKnowOptions()
111+
{
112+
$constraint = new Collection([
113+
'fields' => [new Required()],
114+
'properties' => [new Required()],
115+
'catalog' => [new Optional()],
116+
]);
117+
118+
$this->assertArrayHasKey('fields', $constraint->fields);
119+
$this->assertInstanceOf(Required::class, $constraint->fields['fields']);
120+
$this->assertArrayHasKey('properties', $constraint->fields);
121+
$this->assertInstanceOf(Required::class, $constraint->fields['properties']);
122+
$this->assertArrayHasKey('catalog', $constraint->fields);
123+
$this->assertInstanceOf(Optional::class, $constraint->fields['catalog']);
124+
}
125+
126+
public function testAllKeysAreKnowOptions()
127+
{
128+
$constraint = new Collection([
129+
'fields' => [
130+
'fields' => [new Required()],
131+
'properties' => [new Required()],
132+
'catalog' => [new Optional()],
133+
],
134+
'allowExtraFields' => true,
135+
'extraFieldsMessage' => 'foo bar baz',
136+
]);
137+
138+
$this->assertArrayHasKey('fields', $constraint->fields);
139+
$this->assertInstanceOf(Required::class, $constraint->fields['fields']);
140+
$this->assertArrayHasKey('properties', $constraint->fields);
141+
$this->assertInstanceOf(Required::class, $constraint->fields['properties']);
142+
$this->assertArrayHasKey('catalog', $constraint->fields);
143+
$this->assertInstanceOf(Optional::class, $constraint->fields['catalog']);
144+
145+
$this->assertTrue($constraint->allowExtraFields);
146+
$this->assertSame('foo bar baz', $constraint->extraFieldsMessage);
147+
}
100148
}

0 commit comments

Comments
 (0)