Doctrine2验证是否修改了属性

时间:2015-03-18 21:07:06

标签: php ajax symfony doctrine-orm

我正在构建一个用于上传许多照片的软件包。

我用一张桌子来显示照片的表格。

visual of web page

我的问题是,当我点击“修改器”时,如果我没有更改“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);
    }
});

1 个答案:

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