我正在按照 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/