我试图解决在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)如果没有更好的方法,如何解决这个问题?
非常感谢您的支持
答案 0 :(得分:1)
如果将实体映射到表单,则每次调用handleRequest时,它都会将表单的内容绑定到实体。没有阻止它,因为它是完全预期的功能。
使用此方法的一种方法是使用表单模型,这些表单模型是仅存储为映射到表单的非db映射实体。然后,一旦表单有效,您就可以将模型中的字段复制到数据库实体中。