6 votes

Comment télécharger un fichier à l'aide d'un formulaire sans classe d'entité ?

J'ai essayé de télécharger un fichier en utilisant un formulaire sans classe d'entité. Je n'ai pas eu de chance jusqu'à présent.

  // Controller
  public function uploadAction() {
    $request = $this->getRequest();
    $form = $this->createFormBuilder()
            ->add('images', 'file') // If I remove this line data is submitted correctly
            ->add('dir', 'text')
            ->getForm();

    if ($request->getMethod() == 'POST') {
      $request = $this->getRequest();
      $form->bindRequest($request);

      $data = $form->getData();
      var_dump($data);
    }   
    else
      return $this->render('OverseerMainBundle:Default:form.html.twig', array(
          'form' => $form->createView(),
      )); 
  }

// form.html.twig
{% block body %}
<form action="{{ path('OverseerMainBundle_upload') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}

    <input type="submit" />
</form>
{% endblock %}

Jusqu'à présent, var_dump fait écho :

array(2) { ["images"]=> NULL ["dir"]=> NULL }

Toutefois, si je supprime la ligne ->add('images', 'file') tout va bien :

array(1) { ["dir"]=> string(4) "test" }

P.S. J'ai vérifié le code html du formulaire et de l'attribut enctype="multipart/form-data" est présenté. Ce n'est donc pas un problème.

6voto

Safwan Bakais Points 131

J'espère aussi que cela aidera d'autres personnes :

if ($form->isValid()) {
        $file = $form->get('file')->getData();
        $name = $file->getClientOriginalName();
        $dir = __DIR__.'/../../../../web/uploads';

        $file->move($dir, $name) ;
    }

2voto

thenetimp Points 2300

Avez-vous vérifié que le fichier ne dépasse pas la taille maximale du serveur ? La limite par défaut est de 2MB. Je n'ai pas encore utilisé Symfony 2.0, je n'en suis donc pas certain.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X