Bonjour,
Je souhaite créer une application en utilisant les principes de RESTful, j'ai donc installer FOSRestBundle dans mon application et j'ai réussi en suivant différents tuto à implémenter les méthodes GET et DELETE mais je galère sur les méthodes POST et PUT.
J'ai installé plusieurs applications (au cas où qu'une d'entre elle ne fonctionnerai pas comme elle devrai) me permettant de tester des requêtes sur mon API.
Tout d'abord, de manière un peu anecdotique, lorsque je fais une requête POST http://projet:8000/produits j'obtiens le retour suivant:
1 2 3 4 | <br /> <b>Deprecated</b>: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in <b>Unknown</b> on line <b>0</b><br /> <br /> <b>Warning</b>: Cannot modify header information - headers already sent in <b>Unknown</b> on line <b>0</b><br /> |
Cela n'empêche pas la méthode gérant le POST d'être exécutée ensuite… du coup j'ignore comment corriger ce problème. Par ailleurs curieusement avec PUT je n'ai pas cette erreur.
Voici le code des méthode POST et PUT de mon controller:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php public function postAction(Request $request) { $em = $this->getDoctrine()->getManager(); $produit = new Produit(); $form = $this->createForm(ProduitType::class, $produit); $form->handleRequest($request); if ( $form->isValid() ) { $em->persist($produit); $em->flush(); } } public function putAction(Request $request, $id) { $em = $this->getDoctrine()->getManager(); $produit = $em->getRepository('AppBundle:Produit')->find($id); $form = $this->createForm(ProduitType::class, $produit); $form->handleRequest($request); //return $produit->getLibelle(); if ( $form->isValid() ) { $em->persist($produit); $em->flush(); } } |
Si j'envoie un produit en PUT et que je dé-commente la ligne 20, je remarque que le libellé est en fait celui provenant de la base de données et non celui que j'ai envoyé avec ma requête HTTP alors que dans le profiler je constate que j'ai bien envoyé les informations:
C'est donc comme si mon entité n'était pas mise à jour par ma requête… J'imagine que pour mon POST le problème est le même.
Comment dois-je régler le problème ?
Merci d'avance pour votre aide.
Cordialement, La source.