【问题标题】:Symfony 3.2 form bindings with json requestSymfony 3.2 带有 json 请求的表单绑定
【发布时间】:2017-08-05 22:51:07
【问题描述】:

我使用的是 Symfony 3.2,在将 JSON 数据插入表单时遇到了一点问题。我有我的 Note 实体,我需要使用表单进行验证,但我不断收到错误

不能将 AppBundle\Entity\Note 类型的对象用作数组

我所做的只是创建一个命名的构建器表单,并使用我之前解码的 JSON 对象提交,所以它现在是一个数组。这是代码:

$note = new Note();
$form = $this->get('form.factory')
    ->createNamedBuilder('noteForm', FormType::class, $note)
    ->add('type', TextType::class, [
        'required' => true
    ])
    ->add('title', TextType::class, [
        'required' => true
    ])
    ->add('content', TextType::class, [
        'required' => true
    ])
    ->getForm()
;

$form->submit($data);

if ($form->isValid()) {
    // ...
}

我也尝试使用常规的 FormBuilder,并创建了一个自定义表单类,但这些都不起作用,而且我一直收到同样的错误。是的,我将数据作为 json 对象发送:

{noteForm: {type: "note", title: "something", content: "something"}}

$data 声明为:

$data = json_decode($request->getContent(), true);

你能帮帮我吗?提前致谢!

【问题讨论】:

  • 请显示$data 的声明,以便我们验证它是如何被表单设置为使用的。
  • @fyrye 我在帖子中编辑了它

标签: php json forms symfony


【解决方案1】:

好的,我有点困惑,问题是我将 $data 发送到不同的函数,而该函数是上述问题中的函数,我也添加了 @return Note 注释。我不确定,为什么它不能那样工作,所以如果有人可以为我指出我错在哪里。我还误会的另一件事是将 API 调用发送到 symfony 表单。我在其他线程上读到我必须传递表单名称和表单字段,但是在分析器中它说“表单不应包含额外的字段”,所以我只是编辑了 json 请求,所以它没有表单名称,只有字段,它现在正在工作。我现在发送的 JSON 对象如下所示: {type: "note", title: "something", content: "something"} 我想这意味着您不必再在 Symfony 3.2 中发送表单名称了? 我仍然收到 CSRF 令牌无效错误,但我不知道如何解决,除了从表单中删除 CSRF 验证。 再次感谢,如果这是一个蹩脚的问题,我很抱歉,但我是 symfony 的初学者。 :)

编辑: 我想通了,我不知道我为什么要写这个,但如果有人遇到这个,它可能会有所帮助。所以,$form->isValid() 里面有一段代码,那段代码如下:$formData = $form->getData(); $note->setType($formData['type']); ... 错误是“不能使用 AppBundle\Entity\Note 类型的对象作为数组”。我所做的正是我将 $formData 视为一个数组,而实际上,$formData 是 Note 对象。 所以那是我的错误,确切地说是菜鸟的错误。希望我能帮助像我这样的菜鸟:)

【讨论】:

  • 假设 $request->getContent() 是您发布的 json 对象,您可以使用 $data = json_decode($request->getContent(), true); $form->submit($data['noteForm']); 还假设 Note 对象具有公共属性。
  • @fyrye 它没有公共属性,但它有吸气剂,所以可以工作:) 我解决了,谢谢你的回答。 :)
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 2015-05-28
  • 1970-01-01
相关资源
最近更新 更多