ajout produit avec catégorie

a marqué ce sujet comme résolu.

Bonjour

J’ai suivi le tuto "Créez une API REST avec Symfony 3". J’ai pas mal galéré niveau configuration mais j’avançais bien. Sauf que là je dois faire quelque chose qui n’est pas explicitement décrit et… Bah je n’y arrive pas :’D Pour faire simple je dois ajouter des produits qui peuvent avoir une ou plusieurs catégories (et non ajouter des prix en même temps).

 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\Controller\Annotations as Rest;
use AppBundle\Form\Type\ProduitType;
use AppBundle\Entity\Produit;

class ProduitController extends Controller
{    
    public function getProduitsAction(Request $request){
        $produits = $this->get('doctrine.orm.entity_manager')
                ->getRepository('AppBundle:Produit')
                ->findAll();
        /* @var $produits Produit[] */

        $formatted = [];
        foreach ($produits as $produit) {
            $formatted[] = [
               'name' => $produit->getName(),
            ];
        }

        return new JsonResponse($formatted);
    }

    public function postProduitsAction(Request $request){
        $produit = new Produit();
        $form = $this->createForm(ProduitType::class, $produit);
        $form->submit($request->request->all()); 
// var_dump($form->getErrors()  );
// var_dump($form->isValid());
// die();
        if ($form->isValid()) {
            $em = $this->get('doctrine.orm.entity_manager');
            try{
                $em->persist($produit);
                $em->flush();
                $formatted[] = [
                    'id' => $produit->getId(),
                    'name' => $produit->getName(),
                    'prix' => $produit->getPrix(),
                    'stock' => $produit->getStock()
                ];
            } catch (Exception $e){
                $formatted[] = [
                    'erreur' => 'Err004 : '.$e->getMessage()
                ];

            }
        } else {
            $formatted[] = [
               'erreur' => "Err003 : le Json est invalide."
            ];
        }
            return new JsonResponse($formatted);

    }

}
 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
27
28
29
30
31
<?php
namespace AppBundle\Form\Type;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;  
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;


class ProduitType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
        $builder->add('prix');
        $builder->add('monnaie');
        $builder->add('stock');
        $builder->add('categories', CollectionType::class, [
            'entry_type' => CategorieType::class,
            'error_bubbling' => false,
        ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => 'AppBundle\Entity\Produit',
            'csrf_protection' => false
        ]);
    }
}

Et là il me sort que le json est invalide (l’erreur définie plus haut). je précise que lorsque je ne mets pas le code pour la catégorie il fonctionne très bien.

Quelqu’un aurait une idée ? ._.

Merci

+0 -0

Ah pardon je n’avais pas vu qu’il y avait code et code coloré.

J’ai oublié de préciser mais quand j’affiche les erreurs (on voit les var_dump) je n’ai aucune erreur pour le getErrors mais le isValid renvoie false quand même.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte