【问题标题】:Symfony-2, inserting user in buildForm() functionSymfony-2,在 buildForm() 函数中插入用户
【发布时间】:2014-12-17 11:49:22
【问题描述】:

我有两个实体(用户和项目),带有生成的 CRUD 选项。实体之间的关系是 OneToMany 双向的(用户 1 - * 项目)。在 project/new 中,CRUD 为用户生成了下拉列表,但我想自动设置登录用户,而不是从下拉列表中选择它。

这里是 ProjectType/buildForm() 函数:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('projectTitle')
        ->add('user')
    ;
}

我可以在 buildForm() (来自会话?数据库?)或其他地方将登录用户设置为项目创建者吗?谢谢。

【问题讨论】:

  • 这不是一个有效的 Symfony2 代码(生成器中的字段定义不完整)。你试过什么?您可以将用户作为实体字段,然后构建表单,将适当的对象作为该字段值传递。
  • @TomaszKowalczyk 有效,它会猜测类型,适用于字符串和数字等。

标签: symfony doctrine symfony-2.5 symfony-2.6


【解决方案1】:

是的,在你的控制器中你可能有这样的东西:

$entity = new Project();

$form   = $this->createEditForm($entity);

您可以在上面的行之间添加以下行:

$entity->setUser($this->get('security.context')->getToken()->getUser());

然后您的用户在表单中被预选。

如果你想隐藏它,你可以使用 $form->remove('user'); 并像 createAction 和 updateAction 中提到的那样设置用户 after $form->handleRequest($request);

【讨论】:

    【解决方案2】:

    您可以在控制器中检索您的用户对象并将其作为表单参数发送:

    $form = $this->createForm(new CustomFormType($user), $entity);
    
    class CustomFormType extends AbstractType
    {
        protected $user;
    
        public function __construct($user) {
            $this->user = $user;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2016-03-05
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多