如何在将数据提交到表单之前更改请求?
How to change Request before submitting data to a Form?
我正在按照 JSON API 规范 (Documentation) 使用 Symfony 3 构建一个 API。
提交新数据时,请求格式为:
{
"type": "entity",
"id" : null,
"attributes" : {
"name" : "Test name"
}
}
但问题是由于额外的对象 attributes
.
,请求不符合 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
,扩展解析您的 Request
的 NativeRequestHandler
默认情况下。
然后您只需执行 $builder->setRequestHandler()
即可将其应用于您的表单。
我正在按照 JSON API 规范 (Documentation) 使用 Symfony 3 构建一个 API。
提交新数据时,请求格式为:
{
"type": "entity",
"id" : null,
"attributes" : {
"name" : "Test name"
}
}
但问题是由于额外的对象 attributes
.
所以我希望能够在表单提交之前转换请求,以使表单能够填充底层实体。
我试图注册一个 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
,扩展解析您的 Request
的 NativeRequestHandler
默认情况下。
然后您只需执行 $builder->setRequestHandler()
即可将其应用于您的表单。