Symfony通过编辑添加新记录

问题描述:

基于现有数据库是否可以将新记录保存到数据库?Symfony通过编辑添加新记录

我在URL中传递'id'。如果它为空,则创建具有预设名称的表单,并在提交新项目后添加到数据库中。编辑工作是一样的。

但是我的目标是: 1)使用数据库中的现有数据预填充表单(这就是为什么我在URL中传递id以获取现有记录)。 2)将它保存为新记录。

不幸的是,我的控制器只能像编辑操作一样工作。已编辑的数据只会改变选定的项目 - 不会将其另存为新项目。

是否有可能在一个控制器中执行此操作?如何使用数据库中的现有对象填充表单并保存基于前一个表单的新记录?

/** 
* @Route("/form", name="form") 
* @Template("@AppBundle/Resources/views/form.html.twig") 
*/ 
public function formAction(Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $itemRecordId = $request->get('id'); 

    if($itemRecordId == null){ 
     $item = new Item(); 
     $item ->setName('Test'); 
    } else { 
     $item = $this->getDoctrine() 
      ->getRepository(Item::class) 
      ->find($itemRecordId); 
    } 

    $form = $this->createForm(ItemType::class, $item); 

    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     $item = $form->getData(); 
     $em->persist($item); 
     $em->flush(); 

     return new Response('Item created!'); 
    } 

    return array(
     'form' => $form->createView(), 
    ); 
} 
+0

如果我理解正确,您想传递id,请使用数据库中的Object填充表单,然后将该对象另存为新对象? – kunicmarko20

在坚持你的项目只是克隆它,这将取消设置ID,当你保存它,它会是一个新的对象。

if ($form->isSubmitted() && $form->isValid()) { 
    $item = $form->getData(); 
    $newItem = clone $item; 
    $em->persist(newItem); 
    $em->flush(); 

    return new Response('Item created!'); 
} 

此外,我会考虑分离创建和编辑操作。

+0

工程像魅力。谢谢! – fabtosz