我正在按照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中手动执行此操作,因为这将在我的所有表单(或至少大多数)上发生,因此我搜索更通用的方式来转换请求,但此时我可以弄清楚如何做到这一点。
感谢您的帮助。
答案 0 :(得分:2)
您的EventListener
无权访问Request
,Form
本身也无权访问。
在我看来,最好和最干净的方法是为RequestHandler
定义自定义Forms
,扩展默认解析Request
的{{3}}
然后,您只需执行$builder->setRequestHandler()
即可将其应用于您的表单。