Skip to content

Commit d51aea3

Browse files
committed
weaken the rejection of submitted array data
1 parent b6b5976 commit d51aea3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+254
-31
lines changed

src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypeTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,4 +1521,18 @@ public function testSubmitNullMultipleUsesDefaultEmptyData()
15211521
$this->assertEquals($collection, $form->getNormData());
15221522
$this->assertEquals($collection, $form->getData());
15231523
}
1524+
1525+
public function testSubmitArray()
1526+
{
1527+
$entity1 = new SingleIntIdEntity(1, 'Foo');
1528+
$this->persist([$entity1]);
1529+
1530+
$form = $this->factory->create(static::TESTED_TYPE, null, [
1531+
'em' => 'default',
1532+
'class' => self::SINGLE_IDENT_CLASS,
1533+
]);
1534+
$form->submit([]);
1535+
1536+
$this->assertFalse($form->isSynchronized());
1537+
}
15241538
}

src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public function configureOptions(OptionsResolver $resolver)
5959
'value' => '1',
6060
'empty_data' => $emptyData,
6161
'compound' => false,
62+
'accept_multiple_values' => false,
6263
]);
6364
}
6465

src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,8 @@ public function configureOptions(OptionsResolver $resolver)
328328
'placeholder' => $placeholderDefault,
329329
'error_bubbling' => false,
330330
'compound' => $compound,
331+
// submitted arrays are dealt with in data transformers
332+
'accept_multiple_values' => true,
331333
// The view data is always a string, even if the "data" option
332334
// is manually set to an object.
333335
// See https://github.com/symfony/symfony/pull/5582

src/Symfony/Component/Form/Extension/Core/Type/ColorType.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,18 @@
1212
namespace Symfony\Component\Form\Extension\Core\Type;
1313

1414
use Symfony\Component\Form\AbstractType;
15+
use Symfony\Component\OptionsResolver\OptionsResolver;
1516

1617
class ColorType extends AbstractType
1718
{
19+
/**
20+
* {@inheritdoc}
21+
*/
22+
public function configureOptions(OptionsResolver $resolver)
23+
{
24+
$resolver->setDefault('accept_multiple_values', false);
25+
}
26+
1827
/**
1928
* {@inheritdoc}
2029
*/

src/Symfony/Component/Form/Extension/Core/Type/DateIntervalType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,9 @@ public function configureOptions(OptionsResolver $resolver)
233233
// this option.
234234
'data_class' => null,
235235
'compound' => $compound,
236+
'accept_multiple_values' => function (Options $options) {
237+
return $options['compound'];
238+
},
236239
'empty_data' => $emptyData,
237240
'labels' => [],
238241
]

src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,9 @@ public function configureOptions(OptionsResolver $resolver)
235235
// this option.
236236
'data_class' => null,
237237
'compound' => $compound,
238+
'accept_multiple_values' => function (Options $options) {
239+
return $options['compound'];
240+
},
238241
'empty_data' => function (Options $options) {
239242
return $options['compound'] ? [] : '';
240243
},

src/Symfony/Component/Form/Extension/Core/Type/DateType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,9 @@ public function configureOptions(OptionsResolver $resolver)
276276
// this option.
277277
'data_class' => null,
278278
'compound' => $compound,
279+
'accept_multiple_values' => function (Options $options) {
280+
return $options['compound'];
281+
},
279282
'empty_data' => function (Options $options) {
280283
return $options['compound'] ? [] : '';
281284
},

src/Symfony/Component/Form/Extension/Core/Type/EmailType.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,18 @@
1212
namespace Symfony\Component\Form\Extension\Core\Type;
1313

1414
use Symfony\Component\Form\AbstractType;
15+
use Symfony\Component\OptionsResolver\OptionsResolver;
1516

1617
class EmailType extends AbstractType
1718
{
19+
/**
20+
* {@inheritdoc}
21+
*/
22+
public function configureOptions(OptionsResolver $resolver)
23+
{
24+
$resolver->setDefault('accept_multiple_values', false);
25+
}
26+
1827
/**
1928
* {@inheritdoc}
2029
*/

src/Symfony/Component/Form/Extension/Core/Type/FileType.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ public function configureOptions(OptionsResolver $resolver)
105105
'data_class' => $dataClass,
106106
'empty_data' => $emptyData,
107107
'multiple' => false,
108+
// invalid submitted arrays will be detected when the submitted data are processed by the type
109+
'accept_multiple_values' => true,
108110
'allow_file_upload' => true,
109111
]);
110112
}

src/Symfony/Component/Form/Extension/Core/Type/FormType.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,10 +179,18 @@ public function configureOptions(OptionsResolver $resolver)
179179
'post_max_size_message' => 'The uploaded file was too large. Please try to upload a smaller file.',
180180
'upload_max_size_message' => $uploadMaxSizeMessage, // internal
181181
'allow_file_upload' => false,
182+
'accept_multiple_values' => function (Options $options) {
183+
if ($options['compound']) {
184+
return true;
185+
}
186+
187+
return null;
188+
},
182189
]);
183190

184191
$resolver->setAllowedTypes('label_attr', 'array');
185192
$resolver->setAllowedTypes('upload_max_size_message', ['callable']);
193+
$resolver->setAllowedTypes('accept_multiple_values', ['bool', 'null']);
186194
}
187195

188196
/**

0 commit comments

Comments
 (0)