Symfony:调用表单handleRequest但避免实体持久化

时间:2015-12-09 13:37:40

标签: forms symfony

我有一个模拟搜索表单和表单类型的实体,我使用该表单仅用于搜索目的,我不希望在数据库中修改该实体,因此,当我这样做时:

$formModelEntity = $em->getRepository('AppBundle:SearchForm')
                      ->findOneBy(array('name' => 'the_model'));
$formModelForm = $this->createForm(new SearchFormType(), $formModelEntity, array('action' => $this->generateUrl('dosearch'), 'method' => 'POST'));
$formModelForm->handleRequest($request); //or ->submit($request);
if ($formModelForm->isValid())
{
     $formInstanceEntity->setFieldsFromModel($formModelEntity);
     $em->persist($formInstanceEntity);
     $em->flush();
}

$formModelEntity更改会持久保存到数据库,我想避免这种情况,但仍希望利用handleRequest能力来更新具有所有POST值的实体(仅供读取使用)。

这可能吗?

2 个答案:

答案 0 :(得分:3)

方法handleRequest不保存更改。它只更新方法中的对象。

public function newAction(Request $request)
{
// just setup a fresh $task object (remove the dummy data)
$task = new Task();

$form = $this->createFormBuilder($task)
    ->add('task', TextType::class)
    ->add('dueDate', DateType::class)
    ->add('save', SubmitType::class, array('label' => 'Create Task'))
    ->getForm();

$form->handleRequest($request);

if ($form->isValid()) {
    // ... perform some action, such as saving the task to the database

    return $this->redirectToRoute('task_success');
}

return $this->render('default/new.html.twig', array(
    'form' => $form->createView(),
));

}

以下代码段位于http://symfony.com/doc/current/book/forms.html

正如您所见,实体未被保留。

您可能正在添加持续/同花,以及导致实体更新的原因。

答案 1 :(得分:3)

在symfony中,您只需要持久保存新实体。如果您更新实体经理找到的现有实体,然后刷新,即使您没有坚持,实体也会在数据库中更新。

编辑:您可以使用以下代码行清除实体管理器中的实体:

$em->detach($formModelEntity);