Multiple file upload with Symfony2 Multiple file upload with Symfony2 symfony symfony

Multiple file upload with Symfony2


Ok binding issue solved (enctype syntax error) : i'll give you the code i use. maybe it will help...

I have a Gallery Entity

class Gallery{    protected $id;    protected $name;    protected $description;    private $urlName;    public $files; // the array which will contain the array of Uploadedfiles    // GETTERS & SETTERS ...    public function getFiles() {        return $this->files;    }    public function setFiles(array $files) {        $this->files = $files;    }    public function __construct() {        $files = array();    }}

I have a form class that generate the form

class Create extends AbstractType {    public function buildForm(FormBuilder $builder, array $options) {        $builder->add('name','text',array(            "label" => "Name",            "required" => TRUE,        ));        $builder->add('description','textarea',array(            "label" => "Description",            "required" => FALSE,        ));        $builder->add('files','file',array(            "label" => "Fichiers",            "required" => FALSE,            "attr" => array(                "accept" => "image/*",                "multiple" => "multiple",            )        ));    }}

Now in the controller

class GalleryController extends Controller{    public function createAction() {        $gallery = new Gallery();        $form = $this->createForm(new Create(), $gallery);        // Altering the input field name attribute        $formView = $form->createView();        $formView->getChild('files')->set('full_name', 'create[files][]');        $request = $this->getRequest();        if($request->getMethod() == "POST")        {            $form->bindRequest($request);            // print "<pre>".print_r($gallery->getFiles(),1)."</pre>";            if($form->isValid())            {                // Do what you want with your files                $this->get('gallery_manager')->save($gallery);                return $this->redirect($this->generateUrl("_gallery_overview"));            }        }        return $this->render("GalleryBundle:Admin:create.html.twig", array("form" => $formView));    }}

Hope this help...

NB: If someone know a better way to alter this f** name attribute, maybe in the FormView class or by declaring a new field type, feel free to show us your method...


No extra classes needed (except the gallery_manger service but the issue you describe happens before...)

I don't really know what's wrong. Check for your template (maybe wrong enctype... or name attr missmatching)

first try to do a single file upload, check the documentation:

  1. file Field Type
  2. How to handle File Uploads with Doctrine

Once it works, you have to edit some lines.

  1. add input file multiple attribute.
  2. append [] at the end of the input file name attribute (mine iscreate...[] because my form class name is create, if your iscreateType it will be createType...[])
  3. init $files as an array.

Copy/paste your code here.


All the suggestions I've found here are workarounds for the real situation.

In order to be able to have multiple attachments, you should use form collection.

Quote from the documentation:

In this entry, you'll learn how to create a form that embeds a collection of many other forms. This could be useful, for example, if you had a Task class and you wanted to edit/create/remove many Tag objects related to that Task, right inside the same form.

http://symfony.com/doc/2.0/cookbook/form/form_collections.html

Example case: You have a document, which form is specified by DocumentType. The document must have multiple attachments, which you can have by defining AttachmentType form and adding it as a collection to the DocumentType form.