diff --git a/src/Symfony/Component/Form/CHANGELOG.md b/src/Symfony/Component/Form/CHANGELOG.md index a696c7be9a..0c0035810d 100644 --- a/src/Symfony/Component/Form/CHANGELOG.md +++ b/src/Symfony/Component/Form/CHANGELOG.md @@ -1,6 +1,10 @@ CHANGELOG ========= +2.5.0 +------ + +* added an option for multiple files upload 2.3.0 ------ diff --git a/src/Symfony/Component/Form/Extension/Core/Type/FileType.php b/src/Symfony/Component/Form/Extension/Core/Type/FileType.php index 2c09da6f6b..26dd9f13bb 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/FileType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/FileType.php @@ -23,6 +23,11 @@ class FileType extends AbstractType */ public function buildView(FormView $view, FormInterface $form, array $options) { + if ($options['multiple']) { + $view->vars['full_name'] .= '[]'; + $view->vars['attr']['multiple'] = 'multiple'; + } + $view->vars = array_replace($view->vars, array( 'type' => 'file', 'value' => '', @@ -48,6 +53,7 @@ class FileType extends AbstractType 'compound' => false, 'data_class' => 'Symfony\Component\HttpFoundation\File\File', 'empty_data' => null, + 'multiple' => false, )); } 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 63556eb5a6..0227af4f23 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/FileTypeTest.php @@ -44,6 +44,25 @@ class FileTypeTest extends \Symfony\Component\Form\Test\TypeTestCase $this->assertNull($form->getData()); } + public function testSubmitMultiple() + { + $form = $this->factory->createBuilder('file', null, array( + 'multiple' => true + ))->getForm(); + + $data = array( + $this->createUploadedFileMock('abcdef', 'first.jpg', true), + $this->createUploadedFileMock('zyxwvu', 'second.jpg', true), + ); + + $form->submit($data); + $this->assertSame($data, $form->getData()); + + $view = $form->createView(); + $this->assertSame('file[]', $view->vars['full_name']); + $this->assertArrayHasKey('multiple', $view->vars['attr']); + } + public function testDontPassValueToView() { $form = $this->factory->create('file');