我试图在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())
的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();
}
}
但是当我提交表单而没有上传任何内容(上传不是强制性的)时,我发出错误,表示表格中的列名称不能为空
但我希望上传是可选的,但如果有上传,则名称是必填项
我如何实现这一目标?
提前致谢。
答案 0 :(得分:1)
在您的控制器中,在刷新之前,您必须添加:
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会返回上传文件的实例,否则,它是已保存文件的字符串或null