Symfony2条令表单提交验证失败,始终更新实体


Symfony2 Doctrine form submit validation failed, always update entity

几个小时以来,我一直在试图解决在Doctrine 2实体对象上提交Symfony2表单的问题。

我使用自定义的ObjectManagerFlusher,在内核请求下注册为服务。

<?php
namespace Custom'Namespace'CustomBundle'Services;
use Doctrine'ORM'EntityManager;
class ObjectManagerFlusher
{
    /**
     * @var EntityManager
     */
    private $entityManager;
    public function __construct(EntityManager $entityManager)
    {
        $this->entityManager = $entityManager;
    }
    public function flush()
    {
        if ($this->entityManager->isOpen()) {
            $this->entityManager->flush();
        }
    }
}

简单地说,该服务应该在每个内核终止请求上对每个持久化实体进行刷新。

主要问题是,当我提交SF2表单(下面的例子)时,我会调用方法isValid来调用验证器,做所有必要的事情等等。只有当我编辑映射到实体的现有DB记录时,问题才存在,完全新的记录会被正确验证,因为它们应该是正确的。

$form->handleRequest($request);
if ($form->isValid()) {
    $this->logger->save('example log');
    return true;
}

由于自定义验证组的原因,我无法对上面介绍的ObjectManagerFlusher进行验证。

所以问题是:

1) 如果有什么更好的解决方案来刷新"一次所有"实体,类似于所提出的方法,但只刷新有效的实体?

2) 如果没有更好的方法,如何解决这个问题?

非常感谢的每一次支持

如果将实体映射到表单,每次调用handleRequest时,它都会将表单的内容绑定到该实体。这是无法停止的,因为它完全是预期的功能。

处理此问题的一种方法是使用表单模型,表单模型是非数据库映射的实体,只存在于映射到表单的实体中。然后,一旦表单有效,就可以将模型中的字段复制到数据库实体中。