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.

Tags:

1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 4.50 out of 5)
Loading...

2 Responses to “Validating multiple files in Symfony 2.5”

  1. sevi Says:

    nice solution, thx m8

  2. Peter Says:

    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