我正在使用Symfony3框架并与我的一个表单斗争...我有两个实体;
我正在尝试实现双列表(多选)框。我已经成功了,直到下面的图片:(所以我得到了前端,它的东西......:S)
使用下面的代码,我只能选择(或取消选择)ALL"元素"实体。只有这样,表单才会被提交并保留(成功!)。
但当我选择时,只有1"元素"我可以提交表格,但我收到错误:
执行' INSERT INTO objects_elements(object_id,element_id)VALUES(?,?)'与params [3,1]:
当我取消选择 1"元素"我没有得到任何错误,但元素保留在选定的框中。
这是我的代码:
// ...
class Object {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="Element", inversedBy="objects")
* @ORM\JoinTable(name="objects_elements")
*/
protected $elements;
// ...
}
class Element {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
*
* @ORM\Column(type="string", nullable=true)
*/
protected $name;
/**
* @ORM\ManyToMany(targetEntity="Object", mappedBy="elements")
*/
private $objects;
我的FormType看起来像这样
class ObjectType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('elements', EntityType::class, array(
'class' => 'AppBundle:Element',
'multiple' => true,
'empty_data' => null,
'required' => false,
))
;
}
我的控制器(我只发布editAction)如下所示:
/**
* Displays a form to edit an existing Object entity.
*
* @Route("/{id}/edit", name="object_edit")
* @Method({"GET", "POST"})
*/
public function editAction(Request $request, Object $object) {
$deleteForm = $this->createDeleteForm($object);
$editForm = $this->createForm('AppBundle\Form\ObjectType', $object);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($object);
$em->flush();
return $this->redirectToRoute('object_edit', array('id' => $object->getId()));
}
return $this->render('object/edit.html.twig', array(
'object' => $object,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}