Bonjour,
Je viens solliciter votre aide pour bien comprendre le tuto sur la création d’une API REST avec Symfony3 (il est très didactique, merci à son auteur !), et plus précisément sur la partie Création des ressources.
Voici mon code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // src/AppBundle/Controller/PlaceController.php /** * @Rest\View(statusCode=Response::HTTP_CREATED) * @Rest\Post("/places") */ public function postPlacesAction(Request $request) { $place = new Place(); $form = $this->createForm(PlaceType::class, $place); $form->submit($request->request->all()); // validation des données if ($form->isValid()) { $em = $this->get('doctrine.orm.entity_manager'); $em->persist($place); $em->flush(); return $place; } else { return $form; } } |
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 | // src/AppBundle/Form/Type/PlaceType.php namespace AppBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class PlaceType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('name'); $builder->add('address'); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => 'AppBundle\Entity\Place', // Cross-Site Request Forgery désactivée : pas de session utilisée (API stateless) 'csrf_protection' => false ]); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // src/AppBundle/Entity/Place.php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity() * @ORM\Table(name="places", * uniqueConstraints={@ORM\UniqueConstraint(name="places_name_unique",columns={"name"})} * ) */ class Place { // ... } |
1 2 3 4 5 6 7 8 9 10 11 | // app/config/validation.yml AppBundle\Entity\Place: constraints: - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: name properties: name: - NotBlank: ~ - Type: string address: - NotBlank: ~ - Type: string |
J’ai beau tout relire et comparer avec le code du tuto, je ne vois pas ce que je fais de mal. Pourtant, avec Postman si je lance 3 requêtes POST, j’ai bien 3 enregistrements dans ma table au lieu d’1. Je n’ai jamais l’erreur 400 Bad Request expliquée dans le tuto.
Par contre si j’ajoute une contrainte d’unicité dans ma table sur le champ name, là j’ai bien l’erreur m’indiquant que je crée un doublon. Mais ce n’est pas ce qui est indiqué, j’aimerais y arriver avec la code PHP.
Merci pour votre aide !
+0
-0