2014-02-11 69 views
0

我在Symfony2中工作,我有一个窗体,其中显示了数据库中出现的复选框。我想将所选的复选框保存在数据库中(mayby可以像数组或字符串,如value1,value2)。我该如何处理这如何使用复选框保存和编辑多个值

这是我的代码:

实体:

/** 
* @var string 
*/ 
private $relevantewaben; 

/** 
* @return string 
*/ 
public function getRelevantewaben() 
{ 
    return $this->relevantewaben; 
} 

/** 
* @param string $relevantewaben 
*/ 
public function setRelevantewaben($relevantewaben) 
{ 
    $this->relevantewaben = $relevantewaben; 
} 

控制器:

public function newAction() 
{ 
    $entity = new ChangeRequest(); 
    $form = $this->createCreateForm($entity); 

    return $this->render('OtlgCmdbBundle:ChangeRequest:new.html.twig', array(
     'entity' => $entity, 
     'form' => $form->createView(), 
    )); 
} 


public function updateAction(Request $request, $id) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entity = $em->getRepository('OtlgCmdbBundle:ChangeRequest')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find ChangeRequest entity.'); 
    } 

    $deleteForm = $this->createDeleteForm($id); 
    $editForm = $this->createEditForm($entity); 
    $editForm->handleRequest($request); 

    if ($editForm->isValid()) { 
     $em->flush(); 

     return $this->redirect($this->generateUrl('changerequest_edit', array('id' => $id))); 
    } 

    return $this->render('OtlgCmdbBundle:ChangeRequest:edit.html.twig', array(
     'entity'  => $entity, 
     'edit_form' => $editForm->createView(), 
     'delete_form' => $deleteForm->createView(), 
    )); 
} 

形式:

->add('relevantewaben', 'entity', array(
      'class' => 'OtlgCmdbBundle:applicant', 
      'label' => 'Benötigte, relevante Waben zur Umsetzung', 
      'property' => 'name', 
      'expanded' => true, 
      'required' => false, 
      'multiple' => true, 
      'attr' => array('class' => 'css-checkbox') 

回答

0

如果您声明您的实体和OtlgCmdbBundle:申请人之间的关系,您的实体是关系的所有者一方,则Doctrine将自动为您的帐户进行更改。例如,而不是

/** 
* @var string 
*/ 
private $relevantewaben; 

,你应该有某事像

/** 
* @var \Doctrine\Common\Collections\ArrayCollection 
* @ORM\OneToMany(targetEntity="applicant", mappedBy="changeRequests", cascade={"persist"}) 
*/ 
private $relevantewaben; 

看看:http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html

如果你要保存的不是关系,但事实上,复选框自行选择:

在您的控制器中,变量$entity在您输入if ($editForm->isValid()) {时发生了所有更改,因此您需要d做$entity->getRelevantewaben()得到哪些选择。

当您有一个未映射的字段时,您可以使用$form->get('relevantewaben')->getData()访问该数据,这就是您在表单字段中的值。我没有使用它来获取已经映射的值,但是如果这是您的情况,可以给您一个想法。

+0

谢谢你对我而言,最好的解决方法是建立表格之间的关系。 – kornjan