diff --git a/src/Symfony/Component/Form/CHANGELOG.md b/src/Symfony/Component/Form/CHANGELOG.md index 6c712cc1413a9..4a9f21554f9ca 100644 --- a/src/Symfony/Component/Form/CHANGELOG.md +++ b/src/Symfony/Component/Form/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +7.1 +--- + + * Add `webkitdirectory` to `FileType` + 7.0 --- diff --git a/src/Symfony/Component/Form/Extension/Core/Type/FileType.php b/src/Symfony/Component/Form/Extension/Core/Type/FileType.php index 4e52e19cfc96a..cb7507fb5be0b 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/FileType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/FileType.php @@ -89,6 +89,10 @@ public function buildView(FormView $view, FormInterface $form, array $options): $view->vars['attr']['multiple'] = 'multiple'; } + if ($options['webkitdirectory']) { + $view->vars['attr']['webkitdirectory'] = 'webkitdirectory'; + } + $view->vars = array_replace($view->vars, [ 'type' => 'file', 'value' => '', @@ -114,6 +118,7 @@ public function configureOptions(OptionsResolver $resolver): void 'data_class' => $dataClass, 'empty_data' => $emptyData, 'multiple' => false, + 'webkitdirectory' => false, 'allow_file_upload' => true, 'invalid_message' => 'Please select a valid file.', ]); diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php index b7f3332c1edf9..e384b0cdf3e24 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php @@ -263,6 +263,23 @@ public function testMultipleSubmittedFailedFileUploadsAreTurnedIntoFormErrorUsin } } + public function testDontPassWebkitdirectoryToView() + { + $view = $this->factory->create(static::TESTED_TYPE) + ->createView(); + + $this->assertArrayNotHasKey('webkitdirectory', $view->vars['attr']); + } + + public function testPassWebkitdirectoryToView() + { + $view = $this->factory->create(static::TESTED_TYPE, null, ['webkitdirectory' => true]) + ->createView(); + + $this->assertArrayHasKey('webkitdirectory', $view->vars['attr']); + $this->assertEquals('webkitdirectory', $view->vars['attr']['webkitdirectory']); + } + /** * @dataProvider uploadFileErrorCodes */