使用FOSRestBundle和JMSSerializerBundle我无法通过\FOS\RestBundle\Serializer\Normalizer\FormErrorHandler
将我的无效表单包含在异常中,如here所述。
而不是包含JSON对象的HTTP响应,如上述URL中所述(例如,使用code
,message
和errors
键),我看到了序列化的JSON表示形式表单对象(我已注册JMSSerializerBundle)。 HTTP状态确实设置为400.响应的JSON:
{
"children": {
"title": {},
"sourceAddress": {
"errors": [
"This value should not be blank."
]
},
"payload": {}
}
}
相关配置和代码:
config.yml:
fos_rest:
view:
view_response_listener: 'force'
formats:
json: true
format_listener:
rules:
- { path: ^/, fallback_format: json }
exception:
enabled: true
控制器操作:
public function postCampaignsAction(Request $request)
{
$campaign = new Campaign();
$form = $this->createForm(CampaignType::class, $campaign);
$form->submit($request->request->all());
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($campaign);
$em->flush();
return View::createRouteRedirect('get_campaign', [
'campaign' => $campaign->getId(),
]);
}
return $form;
}
非常感谢任何帮助! :)
编辑:我已设法通过将其添加到parameters.yml
来获得所需结果:
parameters:
jms_serializer.form_error_handler.class: FOS\RestBundle\Serializer\Normalizer\FormErrorHandler
我不明白为什么这是必要的,因为FOSRestBundle/Resources/config/serializer.xml
已经包含:
<parameters>
<!-- Override the default jms FormErrorHandler -->
<parameter key="jms_serializer.form_error_handler.class">FOS\RestBundle\Serializer\Normalizer\FormErrorHandler</parameter>
</parameters>
这可能是FOSRestBundle中的错误吗?
答案 0 :(得分:1)
发现我做错了什么:我在FOSRestBundle
之前将JMSSerializerBundle
放在捆绑数组中进行注册。
JMSSerializerBundle
中FOSRestBundle
和app/AppKernel.php
注册的顺序很重要。如果FOSRestBundle
在<{1}}中返回的数组中 JMSSerializerBundle
之前为 ,则\AppKernel::registerBundles
中的jms_serializer.form_error_handler.class
的参数覆盖{1}} Resources/config/serializer.xml
文件无效。