Symfony 2.2 upload files

file-upload, symfony

Solution

I forget add enctype to my form after added work perfectly

<form action="{{ path('documento_upload') }}" method="post" {{ form_enctype(upload_form) }}>
    {{ form_widget(upload_form) }}
    <button type="submit" class="btn btn-primary">Upload</button>
</form>

Problem

It's been a while since I uploaded files with Symfony2 and it seems that everything has changed, follow the guide in How to handle File Uploads with Doctrine but is outdated and dont work. when i try to bind the form a get a error ``` Catchable Fatal Error: Argument 1 passed to Entity\Portada::setFile() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, string given, ... ``` this is my controller ``` /** * @Route("/upload", name="documento_upload") * @Method("POST") * @Template() */ public function uploadAction(Request $request) { $portada = new Portada(); $form = $this->buildUploadForm($portada); $form->bind($request); if ($form->isValid()) { $portada->upload(); } else { throw new \Exception("Hay un error en el formulario"); } //... } ``` my entity ``` <?php namespace MyName\MyBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\Validator\Constraints as Assert; class Portada { /** * @Assert\File(maxSize="6000000") */ private $file; public $path; /** * Sets file. * * @param UploadedFile $file */ public function setFile(UploadedFile $file = null) { $this->file = $file; } public function upload() { $this->path = $this->getFile()->getClientOriginalName(); $this->getFile()->move( $this->getUploadRootDir(), $this->path ); $this->file = null; } /** * Get file. * * @return UploadedFile */ public function getFile() { return $this->file; } public function getAbsolutePath() { return null === $this->path ? null : $this->getUploadRootDir() . DIRECTORY_SEPARATOR . $this->path; } public function getWebPath() { return null === $this->path ? null : $this->getUploadDir() . DIRECTORY_SEPARATOR . $this->path; } protected function getUploadRootDir() { return __DIR__ . '/../../../../web/'. $this->getUploadDir(); } protected function getUploadDir() { return 'uploads/portada'; } } ```

Original source