request - 如何在向表单提交数据之前更改请求?

标签 request symfony json-api

我正在按照 JSON API 规范 ( Documentation ) 使用 Symfony 3 构建 API。

提交新数据时,请求具有以下格式:

{
  "type": "entity",
  "id"  : null,
  "attributes" : {
    "name" : "Test name"
  }
}

但问题是,由于额外的对象属性,请求不符合 symfony 表单所期望的格式。

所以我希望能够在表单提交之前转换请求,以使表单能够填充底层实体。

我尝试注册一个 FormEvents:PRE_SUBMIT 并在其中执行逻辑,但似乎我无法访问请求内容。

$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
            $data = $event->getData();

            var_dump($data);
            die();
        });

$event->getData()null

我还看到可以注册DataTransformer,但它是按字段注册的,并且也无法访问请求。

我不想在 Controller 中手动执行此操作,因为这会发生在我的所有表单(或至少大多数表单)上,因此我寻找一种更通用的方法来转换请求,但此时我可以不知道如何做到这一点。

感谢您的帮助。

最佳答案

您的 EventListener 无权访问您的 Request,您的 Form 本身也无权访问。

在我看来,最好、最简洁的方法是为您的 Forms 定义一个自定义 RequestHandler,扩展 NativeRequestHandler默认情况下解析您的Request

然后您只需执行 $builder->setRequestHandler() 即可将其应用到您的表单。

关于request - 如何在向表单提交数据之前更改请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35313601/

相关文章:

ember.js - 处理路由时出错 : . .. 断言失败 : You tried to push data with a type . .. 但找不到具有该名称的模型

快速 cookies urlsession 请求

php - Twig:如何检查变量是否为 DateTime 对象

java - Katharsis 2.8.2 升级问题

forms - FOSRestBundle 将 json 数据发布到表单不起作用

php - 如何删除实体是从 generate :doctrine:entity 生成的

node.js - JSONAPI实现

math - 根据 Google 的 Jeff Dean 的请求延迟

xml - 在 SOAP UI 模拟响应脚本中访问请求 XML

java - 从 Java Soap 客户端使用 .NET Web 服务?