【问题标题】:symfony2 form how to accept json payload from angular resourcesymfony2 表单如何接受来自角度资源的 json 有效负载
【发布时间】:2014-09-10 14:28:54
【问题描述】:

我目前正在尝试将 Symfony 表单与angularJS 结合使用...服务将数据发布到表单,该表单应该将实体保存到数据库中。不幸的是,ngResource 将数据作为 JSON 有效负载发送,因此 Symfony Forms 无法处理它......我在角度方面尝试了很多东西,比如更改标题:

headers : {'Content-Type': 'application/x-www-form-urlencoded'}

我在角度方面找不到更多,所以我认为我可以在 Symfony 方面找到解决方案。 任何想法我怎么能让这个工作?当然也欢迎使用 Angular 解决方案。

【问题讨论】:

  • 我建议将 AngularJS 放在一边,并坚持使用基本的 json。这或多或少是标准的。有许多文章展示了如何使用 Symfony 2/REST/Forms。让一切顺利进行需要一些努力,但之后会一帆风顺。尝试:welcometothebundle.com/symfony2-rest-api-the-best-2013-way 作为开始。如果 2013 年的文章过于简洁,请阅读引用的 2012 年文章。

标签: angularjs forms symfony payload ngresource


【解决方案1】:

在深入阅读文档后,我终于找到了解决方案。 Symfony\Component\Form\Form::bind 不需要请求,它也适用于数组。所以这是我的解决方案(草率的方式,需要检查标题等以供生产使用..)

public function setFooAction(Request $request){

  $form = $this->createForm();//get the form class, etc...
  $json_data = json_decode($request->getContent(),true);//get the response data as array
  $form->bind($json_data); //Bind data to Form

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

  }

}

【讨论】:

  • 从 Symfony v2.3 开始,$form->bind() 已被弃用,并将在 v3.0 中删除 - 应使用 $form->submit() 代替。
  • 我收到很多“此表单不应包含额外字段”的错误:\
  • 如果你只是发送一个完整的角度“实体”,你可能会得到一堆角度特定的变量,这些变量当然没有映射到你的表单中......检查播放负载,a解决此问题的快速而肮脏的技巧是将其转换为 json 并返回为具有角度的对象...
猜你喜欢
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多