2014-02-11 101 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