【问题标题】:Symfony2 add current user to form input dataSymfony2 添加当前用户以形成输入数据
【发布时间】:2013-08-08 08:04:26
【问题描述】:

我有一个标准 FOS 用户,它与博客实体建立了多对一实体关系。

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="blog")
 * @ORM\JoinColumn(name="user", referencedColumnName="id")
 */
private $user;

我使用 app/console generate:doctrine:crud 命令生成了一个基本的 crud 系统。

当我创建一个新的博客实体时,我想插入执行该操作的登录用户。默认情况下,Symfony 生成 CRUD 代码,允许用户选择连接到实体的用户。

    $builder
        ->add('name')
        ->add('address')
        ->add('facebook')
        ->add('twitter')
        ->add('user')
    ;

在控制器中,我可以使用 security.context 访问已登录的用户:

$user = $this->get('security.context')->getToken()->getUser();

改变这种情况的最佳行动方案是什么?

【问题讨论】:

    标签: symfony doctrine-orm symfony-forms fosuserbundle


    【解决方案1】:

    好的!解决了我自己的问题(如果我做错了,请随时纠正我,我会接受更好的答案)。然而,这个似乎确实运作良好!

    在执行$form->isValid()检查后,可以在控制器中添加用户。例如,这是我的控制器功能。

    public function createAction(Request $request)
    {
        $entity  = new Blog();
        $form = $this->createForm(new BlogType(), $entity);
        $form->bind($request);
    
        if ($form->isValid()) {
            $entity->setUser($this->get('security.context')->getToken()->getUser());
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $em->flush();
            return $this->redirect($this->generateUrl('blog_show', array('id' => $entity->getId())));
        }
    
        return $this->render('ExampleBundle:Blog:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView(),
        ));
    }
    

    用户需要从表单构建器中删除才能工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-19
      • 2020-01-21
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 2011-11-03
      相关资源
      最近更新 更多