EntityType双列表Symfony表单

时间:2016-07-15 20:42:51

标签: php forms symfony

我正在使用Symfony3框架并与我的一个表单斗争...我有两个实体;

  1. 对象
  2. 元素
  3. 我正在尝试实现双列表(多选)框。我已经成功了,直到下面的图片:(所以我得到了前端,它的东西......:S) enter image description here

    使用下面的代码,我只能选择(或取消选择)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(),
        ));
    }
    

0 个答案:

没有答案