Загрузить файл Symfony2 с расширением stof

я пытаюсь настроить форму с загрузкой файлов под Symfony2 с загружаемым расширением (stof / doctrine)

вот мои сущности

клуб

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

файл

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

...

мой тип формы
clubType

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

тип файла

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

мой контроллер

$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();
}
}

но когда я отправляю свою форму без загрузки чего-либо (загрузка не обязательна), я получаю сообщение об ошибке, указывающее, что имя столбца в таблице File не может быть нулевым

но я хочу, чтобы загрузка была необязательной, но если есть загрузка, имя обязательно

Как я могу этого достичь?

Заранее спасибо.

5

Решение

В вашем контроллере перед сбросом необходимо добавить:

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());
}

При загрузке нового файла getPath возвращает экземпляр загруженного файла, если нет, это строка для уже сохраненного файла или ноль

увидеть https://github.com/stof/StofDoctrineExtensionsBundle/blob/master/Resources/doc/index.rst#using-uploadable-extension

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]