2015-01-21 10 views
5

Próbuję utworzyć formularz z wysyłania pliku pod Symfony2 z rozszerzeniem przesyłanej na serwer (stof/doctrine)Symfony2 upload plików z rozszerzeniem stof przesyłanej na serwer

oto moje podmioty

klubu

<?php 
... 
class Club 
{ 
... 
/** 
* @ORM\ManyToOne(targetEntity="my\TestBundle\Entity\File", cascade={"persist"}) 
* @ORM\JoinColumn(nullable=true) 
*/ 
private $logo; 
... 
} 

plik

<?php 
... 
use Gedmo\Mapping\Annotation as Gedmo; 
use Doctrine\ORM\Mapping as ORM; 
... 
/** 
* File 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="my\TestBundle\Entity\FileRepository") 
* @ORM\HasLifecycleCallbacks() 
* @Gedmo\Uploadable(pathMethod="getPath", callback="myCallbackMethod", filenameGenerator="SHA1", allowOverwrite=true, appendNumber=true) 
*/ 
class File 
{ 
... 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255) 
* @Gedmo\UploadableFileName 
*/ 
private $name; 

... 

moim typie forma clubType

$builder->add('logo', new FileType()) 

filetype

$builder->add('name', 'file', array(
      'required' => false, 
     )) 

mój kontroler

$form = $this->createForm('my_testbundle_club', $club); 
$request = $this->get('request'); 
    if ($request->getMethod() == 'POST') { 
     $form->submit($request); 

     if ($form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($club); 
      $em->flush(); 
     } 
    } 

ale kiedy przedstawić moją postać bez wysyłania czegokolwiek (upload nie jest obowiązkowe), mam błąd mówiąc, że nazwa kolumny w tabela Plik nie może być pusty

ale chcę, aby przesyłanie było opcjonalne, ale jeśli jest przesyłanie, nazwa jest obowiązkowa

Jak mogę to osiągnąć?

Z góry dziękuję.

+1

Nie wiem o tym rozszerzeniu, ale czy próbowałeś dodać 'nullable = true'? Inną opcją jest dodanie wartości domyślnej, gdy jest pusta, co i tak jest prawdopodobnie przydatne (jak "fałszywy" obraz "logo"). – FeedTheWeb

Odpowiedz

1

W kontrolerze, przed płukaniem, trzeba dodać:

if ($club->getLogo()->getPath() instanceof \Symfony\Component\HttpFoundation\File\UploadedFile) { 
    $uploadManager = $this->get('stof_doctrine_extensions.uploadable.manager'); 
    $uploadManager->markEntityToUpload($club->getLogo(), $club->getLogo()->getPath()); 
} 

Podczas przesyłania nowego pliku, getPath powrócić instancję przesłanego pliku, jeśli nie, to ciąg do już zapisanego pliku lub null

zobacz https://github.com/stof/StofDoctrineExtensionsBundle/blob/master/Resources/doc/index.rst#using-uploadable-extension

Powiązane problemy