我正在构建一个用于上传许多照片的软件包。
我用一张桌子来显示照片的表格。
我的问题是,当我点击“修改器”时,如果我没有更改“Activé”或“Titre”,则无法完成。
public function ajaxEditPhotoAction(Request $request, $id) {
$error = null;
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository("FDMFileUploaderBundle:Photo");
$photo = $repository->find($id);
$form = $this->get('form.factory')->create(new PhotoType(), $photo);
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
$em->flush();
}
else {
$error = "Mauvaise donnée";
}
}
else {
$error = "Wrong Method";
}
return $this->render('FDMFileUploaderBundle:Default:editPhoto.html.twig', array(
"error" => $error
)
);
}
如果我在isValid()
之后有这一行,那可行,但当“Activé”或“Titre”发生变化时,我的照片会上传两次。
$photo->upload();
如果我的实体中保留的属性未更改,我如何强制上传?
我看了一下学说注释,但是我找不到解决方案。
Ajax提交
var data = new FormData(this);
$.ajax({
type: "POST",
url: url,
data: data,
contentType: false,
cache: false,
processData:false,
success: function(data) {
alert("Success");
},
error: function(xhr, textStatus, errorThrown) {
alert("Error "+xhr+textStatus+errorThrown);
}
});
答案 0 :(得分:0)
您可以检查$request
是否包含文件。这样就可以了。
if ($form->isValid() || $request->files->count() > 0) {
$photo->upload();
$em->flush();
}
由olive007编辑:
谢谢你的帮助我找到了解决办法:
$nbFile = $request->files->count();
if ($form->isValid()) {
$uow = $em->getUnitOfWork();
$uow->computeChangeSets();
if ($nbFile == 1 && !$uow->isScheduledForUpdate($photo)) {
// title and enabled aren't modified but file is
$photo->upload();
}
else {
$em->flush();
}
}