必须管理传递到选择字段的实体。也许坚持他们在实体经理?

时间:2015-04-24 14:38:17

标签: php forms symfony doctrine-orm entity

我是Symfony2的新手,我没有得到任何有关此错误消息的答案

Entities passed to the choice field must be managed. Maybe persist them in the entity manager?

我的Symfony版本是2.3

我在Controller addAction()

中输入了这样的代码
    $em = $this->getDoctrine()->getManager();

    $user = new User(); //User is my main entity
    $form = $this->createFormBuilder($user)
        ->add('company','entity', array(
            'class' => 'AGUserBundle:Company', //OneToMany child entity with User
            'property' => 'name',
            'multiple' => false
        ))
        ->getForm();

    $form->add('Ajouter', 'submit', array(
        'attr' => array('class' => 'btn btn-primary'),
    ));


    $request = $this->get('request');

    $form->handleRequest($request);

    if($form->isValid()){
        $em->persist($user);
        $em->flush();
    }

我有一个与我的公司类具有OneToMany关系的User类,一切都由Doctrine正确生成。

我的目标是使用当前的公司列表制作用户创建表单,以允许用户选择一个并将其链接到他的帐户。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

感谢@Andariel,我的关系错了(需要一个ManyToOne)

对于我的第二个问题,我能够使用FOSUserBundle的userManager注册用户,它就像一个魅力。

这是代码,如果它可以帮助某人:

 if($form->isValid()){
        //Getting the company from FORM Response
        $companyObject = $form->getData()->getCompany(); 

        //Setting company to user Obj
        $user->setCompany($companyObject); 

        //Persisting changes
        $userManager->updateUser($user,false);

        $this->get('session')->getFlashBag()->add(
            'notice',
            'User added !'
        );

        return $this->redirect($this->generateUrl('user_list'));
    }