Php Symfony 2表单可选图像

Php Symfony 2表单可选图像,php,forms,symfony,image-uploading,symfony-forms,Php,Forms,Symfony,Image Uploading,Symfony Forms,我的Symfony 2表格和图像上传有问题 我创建了一个表单: $form = $formFactory->create(new PlaceType($this->_em), $place, array( 'method' => 'POST', 'status' => $place->getStatus() )); 在PlaceType.php中: 在ImageType.php中: 它

我的Symfony 2表格和图像上传有问题

我创建了一个表单:

$form = $formFactory->create(new PlaceType($this->_em), $place, array(
                'method' => 'POST',
                'status' => $place->getStatus()
        ));
在PlaceType.php中:

在ImageType.php中:

它工作得很好,但是当我没有填充fiel字段时,会抛出一个异常,因为缺少文件信息

我想将此字段设置为可选字段。我尝试了很多解决方案,但都不管用

编辑我的实体代码image.php:

编辑2我的AJAX控制器代码:

    $form->handleRequest($request);
    if ($form->isValid()) {

        $em->persist($place);
        $em->flush();
    }
如您所见,我无法控制持久化和刷新,因此,我无法管理我的图像上载

编辑3:

我使用ArrayCollection保留数据库中的旧图像并添加新图像,以下是我在AJAX控制器中的代码:

后来:

foreach ($originalArray as $images) {
    $place->addImage($images);
}

谢谢。

提交表单后,您能告诉我们您是如何使用表单的吗?我有一个AJAX控制器,图片的上传是通过$form->handleRequest$request;完成的;。在我的图像实体中,我有一些用于preUpdate、postPersist等的函数。好的,你能告诉我们确切的错误消息,以及引发错误的行吗?异常:执行带有参数[null,null,null,null,null]:SQLSTATE[23000]的“插入图像名称,链接,排序,状态id值?”时发生异常:完整性约束冲突:1048列“名称”在我的数据库中不能为null,默认情况下名称不为null。所以,这个错误是正常的,但我想绕开它。即使没有填充图像,您是否仍将其保存在数据库中?
    /**
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function preUpload() {
        if (null !== $this->file) {
            $this->link = sha1(uniqid(mt_rand(), true)).'.'.$this->file->guessExtension();
            $this->name = 'name';
            $this->sort = 1;
        }
    }

    /**
     * @ORM\PostPersist()
     * @ORM\PostUpdate()
     */
    public function upload() {
        if (null === $this->file) {
            return;
        }
        $this->file->move($this->getUploadRootDir(), $this->link);

        unset($this->file);
    }

    /**
     * @ORM\PostRemove()
     */
    public function removeUpload() {
        if ($file = $this->getAbsolutePath()) {
            unlink($file);
        }
    }

    public function getAbsolutePath() {
        return null === $this->link ? null : $this->getUploadRootDir().'/'.$this->link;
    }

    protected function getUploadRootDir() {
        return __DIR__.'/../../../../web/'.$this->getUploadDir();
    }

    protected function getUploadDir() {
        return 'uploads/media';
    }
    $form->handleRequest($request);
    if ($form->isValid()) {

        $em->persist($place);
        $em->flush();
    }
$originalArray = new ArrayCollection();
foreach ($place->getImages() as $images) {
    $originalArray->add($images);
    $place->removeImage($images);
}
foreach ($originalArray as $images) {
    $place->addImage($images);
}