Php Symfony 2表单可选图像
我的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中: 它
$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);
}