如何使用复选框保存和编辑多个值

时间:2014-02-11 08:39:06

标签: symfony checkbox

我在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')

1 个答案:

答案 0 :(得分: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()) {会包含所有更改,因此您可以$entity->getRelevantewaben()来获取所选内容。

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