2013-08-21 6 views
5

Io uso Symfony2.3. Ho una forma simile a questo:Symfony2: come caricare un file senza Doctrine?

<form action="{{ path("member_update") }}" method="post" {{ form_enctype(form) }}> 
    {{ form_widget(form.pic) }} 
    ... 
    {{ form_widget(form._token) }} 
</form> 

e voglio caricare immagini utente in una directory.Then io uso questo controller:

$member , $form , $dm is defined... 

if ($form->isValid()) { 
     // Handle profile picture upload process 
     $uploadDir=dirname($this->container->getParameter('kernel.root_dir')) . '/web/bundles/mybundle/myfiles'; 
     $form['pic']->getData()->move($uploadDir,$member->getId()); 
     // End of upload 

     $dm->persist($member); 
     $dm->flush(); 
     return $this->redirect($this->generateUrl("member_profile")); 
    } 

Si deve lavorare, ma vedo questo errore:

Exception: Serialization of 'Symfony\Component\HttpFoundation\File\UploadedFile' is not allowed 

1. in pathToMyProject...\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\DataCollector\DataCollector.php line 27 
2. at serialize(..... 

Qual è il problema ??!

risposta

5

Il problema risolto! A cambiare questa linea in MemberType:

$builder->add('pic','file'); 

a questo:

$builder->add('pic','file', array('mapped'=>false)); 

mio errore è stato che io devo spiegare il campo "pic" non è mappato al Entity (o Documento di Mongo, come il mio progetto). Il kernel di Else Symfony prova a mettere il valore di "pic" in un campo di Entity. E non ho nessun campo che regge un file! Carico l'immagine in una directory e memorizzo solo il percorso dell'immagine all'interno dell'entità. Quando ho cambiato questo, il problema è stato risolto facilmente! :-) Quindi tieni presente di spiegare chiaramente tutto a Symfony!