【问题标题】:Symfony 3 : add a field to a already submitted formSymfony 3:向已经提交的表单添加一个字段
【发布时间】:2018-12-12 21:55:37
【问题描述】:

在查看了其他主题后我还没有解决我的问题,我希望将字段 user_id 添加到表单中(因为用户不会选择它)但是 symfony 返回我“调用成员函数 addEventListener( ) 在字符串上"

这是我的代码:

if ($form->isSubmitted() && $form->isValid()) {
        $builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
            $data = $event->getData();
            $form = $event->getForm();
            $data['user_id'] = '2';
            $event->setData($data); 
        });
        $em = $this->getDoctrine()->getManager();
        $em->persist($deplacement);
        $em->flush($deplacement);

        return $this->redirectToRoute('deplacement_show', array('id' => $deplacement->getId()));
    }

【问题讨论】:

  • 与其使用FormBuilder,不如在flush之前在控制器中做$entity->setUser($user)$user是你提交后获取的用户对象?

标签: forms symfony field


【解决方案1】:

确定这是好方法吗?也许你最好编写一个方法来更新或创建 $deplacement,并传递 2 个参数:表单中的 $data 变量和 user_id,如下所示:

if ($form->isSubmitted() && $form->isValid()) {

    $em = $this->getDoctrine()->getManager();
    $userId = 2; 
    $formData->userId = $userId;
    $deplacement->update($formData);
    $em->persist($deplacement);
    $em->flush($deplacement);

    return $this->redirectToRoute('deplacement_show', array('id' => $deplacement->getId()));
}

另外我认为你不需要事件监听器。你为什么用它?

【讨论】:

  • 我认为您不需要使用该事件侦听器,但如果您愿意,您必须将该代码放入 FormType。可能您在某处找到了该代码并复制到了控制器中,但 $builder 变量通常在该对象中使用,即您正在使用的表单的 formType。
  • 但我确定你不需要那个事件监听器
  • 我已经用正确的代码更新了我的答案,这将起作用。
猜你喜欢
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 2019-04-21
  • 2013-07-22
  • 1970-01-01
相关资源
最近更新 更多