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

时间:2015-03-18 12:12:20

标签: php forms symfony doctrine-orm doctrine

我试图解决在Doctrine 2 Entity对象上提交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 来调用验证器,执行所有必要的事情等。只有当我编辑映射到实体的现有数据库记录时才存在问题,完全新的数据被验证为正常,因为它们应该。

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

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

所以问题是:

1)如果有任何一种更好的解决方案可以一次性冲洗&#34;实体,与所提出的方法类似,但只有有效的实体?

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

非常感谢您的支持

1 个答案:

答案 0 :(得分:1)

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

使用此方法的一种方法是使用表单模型,这些表单模型是仅存储为映射到表单的非db映射实体。然后,一旦表单有效,您就可以将模型中的字段复制到数据库实体中。