Utilisation de FOSRestBundle et JMSSerializerBundle Je ne parviens pas à recouvrir mes formulaires non valides dans une exception via \FOS\RestBundle\Serializer\Normalizer\FormErrorHandler
, comme décrit here.La forme non valide n'est pas normalisée lors de l'utilisation de FOSRestBundle
Au lieu de la réponse HTTP pour contenir l'objet JSON comme décrit dans l'URL ci-dessus (par exemple avec code
, message
et errors
clés), je vois la représentation JSON sérialisée de l'objet Form (je le JMSSerializerBundle enregistré). L'état HTTP ne se réglé sur 400. Le JSON de la réponse:
{
"children": {
"title": {},
"sourceAddress": {
"errors": [
"This value should not be blank."
]
},
"payload": {}
}
}
config associée et code:
config.yml:
fos_rest:
view:
view_response_listener: 'force'
formats:
json: true
format_listener:
rules:
- { path: ^/, fallback_format: json }
exception:
enabled: true
Action de contrôleur:
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;
}
Toute aide est très appréciée! :)
EDIT: J'ai réussi à obtenir le résultat souhaité en ajoutant ceci à parameters.yml
:
parameters:
jms_serializer.form_error_handler.class: FOS\RestBundle\Serializer\Normalizer\FormErrorHandler
Je ne comprends pas pourquoi cela est nécessaire cependant, parce que FOSRestBundle/Resources/config/serializer.xml
contient déjà:
<parameters>
<!-- Override the default jms FormErrorHandler -->
<parameter key="jms_serializer.form_error_handler.class">FOS\RestBundle\Serializer\Normalizer\FormErrorHandler</parameter>
</parameters>
Cela peut-il être un bug dans FOSRestBundle?