FOSRestBundleとJMSSerializerBundleを使用のように、\FOS\RestBundle\Serializer\Normalizer\FormErrorHandler
経由で例外でラップされる無効なフォームを取得できません。FOSRestBundleを使用しているときに無効なフォームが正規化されない
代わりに前述のURLに記載のように(例えばcode
、message
とerrors
キーで)JSONオブジェクトを格納するためのHTTPレスポンスの、Iは、フォームオブジェクト(IはJMSSerializerBundle登録有する)の直列化JSON表現を参照してください。 HTTPステータスは応答のJSON 400に設定しますん:
{
"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;
}
ご迷惑をおかけして申し訳ありません。 :)
EDIT:FOSRestBundle/Resources/config/serializer.xml
がすでに含まれているので、これはしかし必要な理由
parameters:
jms_serializer.form_error_handler.class: FOS\RestBundle\Serializer\Normalizer\FormErrorHandler
私は理解していない:私はparameters.yml
にこれを追加することによって、望ましい結果を得ることができた
<parameters>
<!-- Override the default jms FormErrorHandler -->
<parameter key="jms_serializer.form_error_handler.class">FOS\RestBundle\Serializer\Normalizer\FormErrorHandler</parameter>
</parameters>
これはFOSRestBundleのバグですか?