FosRestBundle post/put [créer un nouveau/mise à jour de l'entité] ne pas lire Demande correctement
longue histoire courte:
À l'aide de FOSRestBundle je suis en train de créer des entités par la POSTE d'appel, ou de modifier celles qui existent déjà par METTRE.
voici le code:
/**
* Put action
* @var Request $request
* @var integer $id Id of the entity
* @return View|array
*/
public function putCountriesAction(Request $request, $id)
{
$entity = $this->getEntity($id);
$form = $this->createForm(new CountriesType(), $entity, array('method' => 'PUT'));
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->view(null, Codes::HTTP_NO_CONTENT);
}
return array(
'form' => $form,
);
} //[PUT] /countries/{id}
Si je l'appelle /pays/{id} avec MIS le passage d'un json comme {"description":"Japon"}, c'modifier mon pays avec l'id=1, mettant ainsi un vide description.
Si, au lieu de cela, j'essaie de créer une NOUVELLE entité avec cette méthode:
/**
* Create new Countries (in batch)
* @param Request $request json request
* @return array redirect to get_coutry, will show the newly created entities
*/
public function postCountriesAction(Request $request)
{
$entity = new Countries();
$form = $this->createForm(new CountriesType(), $entity);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirectView(
$this->generateUrl(
'get_country',
array('id' => $entity->getId())
),
Codes::HTTP_CREATED
);
}
return array(
'form' => $form,
);
} //[PUT {"description":"a_description"}] /countries
il me donne un message d'erreur indiquant:
exception occurred while executing 'INSERT INTO countries (description) VALUES (?)' with params [null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'description' cannot be null
semble que je ne suis pas en mesure de passer correctement la demande de se lier à la forme.
Avis que si je json_decode la demande, comme l'a suggéré ici il de répondre avec une
{
"code":400,
"message":"Validation Failed",
"errors":{
"errors":[
"This value is not valid."
],
"children":{
"description":[
]
}
}
}
Des Conseils?
Grâce,
Rouleaux de
OriginalL'auteur rollsappletree | 2013-12-13
Vous devez vous connecter pour publier un commentaire.
J'ai résolu 🙂
c'est la raison pour laquelle il n'avait pas travaillé avant:
Dans ma définition de Formulaire le nom de "zanzibar_backendbundle_countries".
Afin de lier une demande à cette forme json devrait ressembler à ceci:
Car je voulais que ce soit quelque chose comme
J'ai dû supprimer le nom de la Forme:
En général, si vous voulez poster un json avec un espace réservé comme
votre nom de formulaire doit être exactement "quelque chose"
OriginalL'auteur rollsappletree
Essayez ceci :
request: PUT
request: Array ([description] => Japan)
entity from db: Countries Object ([id:protected] => 1; [description:protected] => Italy)
from form->getData()form: Countries Object <- ([id:protected] => 1; [description:protected] => ) what it save: entity: Countries Object([id:protected] => 1; [description:protected] => )
OriginalL'auteur Pimento Web