Validating multiple files in Symfony 2.5

Symfony 2.5 implemented handy multiple file upload support, e.g. input fields that look like this:

<input id="form_resumes" multiple="multiple" name="form[documents][]" required="required" type="file" />

Unfortunately there seem to be some problems in the Validator component. For example, it’s difficult to require at least one file. Likewise the All constraint doesn’t play nicely with validation groups. Here are a few workarounds.

To require at least one file but not more than three, use the Count constraint in combination with All and NotNull:

This works around a bug where 'min'=>1 is ignored.

If you’re using validation groups, you may notice that the All constraint is not being applied. Here’s how to fix it:

Note line 11: 'groups' => 'Test',

Technically we shouldn’t have to specify validation groups for the All constraint; in fact there seems to be no way to do this in YAML. Hacking it in as an option to All on the PHP side however seems to be working for me. YMMV. And as far as I can tell this last one is fixed in 2.6.

2 thoughts on “Validating multiple files in Symfony 2.5

  1. Best solution:

    $documents = new Documents();
    $form = $this
    ->createFormBuilder($documents)
    ->add(‘documents’, ‘file’, [
    ‘required’ => false,
    ‘multiple’ => true
    ])
    ->getForm()
    ->handleRequest($request);

    class Documents
    {
    /**
    * @Assert\Count(max = “3”)
    * @Assert\All({
    * @Assert\NotNull()
    * })
    *
    * @var UploadedFile[]
    */
    protected $files;

    // set and get methods for $files
    }

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.