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

时间:2016-02-10 11:13:04

标签: request symfony json-api

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

提交新数据时,请求采用以下格式:

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

但问题是请求不符合symfony的表格所期望的格式,因为额外的对象attributes

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

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

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

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

$event->getData()null

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

我不想在Controller中手动执行此操作,因为这将在我的所有表单(或至少大多数)上发生,因此我搜索更通用的方式来转换请求,但此时我可以弄清楚如何做到这一点。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您的EventListener无权访问RequestForm本身也无权访问。

在我看来,最好和最干净的方法是为RequestHandler定义自定义Forms,扩展默认解析Request的{​​{3}}

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