2013-04-22 41 views
6

Symfony2 ile dosya yüklediğimden beri bir süre geçti ve her şey değişmiş gibi görünüyor, kılavuzu How to handle File Uploads with Doctrine numaralı telefondan takip ediyor ancak güncel değil ve çalışmıyor.Symfony 2.2 dosya yükleme

i formu bağlamak çalıştığınızda bir hata alıyorum

Catchable Fatal Error: Argument 1 passed to Entity\Portada::setFile() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, string given, ... 

bu benim denetleyicisi

/** 
* @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"); 

    } 

    //... 
} 

benim varlıktır

<?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'; 
    } 
} 

cevap

15

Ben sonra benim forma enctype eklemek unutmak iş mükemmel ekli

<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> 
+0

+1 aaaaahhhhh .... teşekkürler :) –

+0

bunu form oluşturucu olmadan yapmak mümkün mü? – Gigala

+2

@Gigala mümkün ama denemiyorum. '$ this-> getRequest() -> filesB'yi geri döndüren dosyalara göz atın ve nasıl kullanacağınızı kontrol edebilirsiniz. – rkmax