IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Créer ressource avec multiple relation


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Par défaut Créer ressource avec multiple relation
    Bonjour,

    Je souhaiterai pouvoir créer ou lier un utilisateur avec des commandes composé de produits et de suppléments.

    J'ai donc un User en OneToMany avec Commande qui est en oneTomany avec CompositionCommande.

    J'aimerai donc utiliser les 3 formulaires de ces entités afin de contrôler les données insérer mais je m'y perds , le Json qui serait envoyé ressemblerait à :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    {
     
    	"token": "test",
    	"commandes":{
    		"remarque": "",
    		"status": 0,
    		"compositionCommande": [{
    			"product": {
    				"description": "Pain burger, sauce, tartare de légumes, salade fraîche, poulet rôti du Sud-ouest",
    				"id": 1,
    				"is_supp": true,
    				"name": "Le special",
    				"price": 595,
    			"supplements": [{
    				"id": 2,
    				"newPrice": 195,
    				"produit": {
    					"id": 9,
    					"is_supp": true,
    					"name": "Salade",
    					"price": 495,
    					"supplements": []
    				}
    			}]
    		}
    	}]	
     
    	}
     
     
     
     
    }
    Le probleme est que j'ai du mal a faire le lien entre les 3, sachant qu'il faut que je vérifie si mon User existe ou si je dois le créer, et que je dois créer une liste de compositionCommande lier à ma nouvelle Commande.
    Si quelqu'un pourrait m'expliquer quelle logique mettre en place car je m'y perds !

    Cordialement,

  2. #2
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Par défaut
    Petit up,

    Du coup je suis partis sur l'idée de contrôler si le User et existant et sinon de l'ajouter grace à son formulaire dédié , le problème est qu'a la création je tombe toujours sur l'erreur : "This value is not Valid " que ce soit pour l'email et le token :/ pourtant ce ne sont que des String sans validation particulière !

    Je me retrouve avec un probleme aussi en essayant de créer une commande ainsi que des compositions associés, je me retrouve avec une erreur 500 mais pas de message de retour avec POSTMAN , je vous joint mon code si ca parle à quelqu'un :

    Le controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    /**
         * @Rest\View(statusCode=Response::HTTP_CREATED,serializerGroups={"user"})
         * @Rest\Post("/test")
         */
        public function postCommandeAction(Request $request){
     
        $data = $request->request->all();
     
     
            //      USER
     
     
    //      Verification Token Ou Email present
            if (isset($data['email']) || isset($data['token'])){
     
    //          Verification email et token != null
                if (empty($data['email']) && empty($data['token']) ){
                    return new JsonResponse(['message'=> 'email et/ou token vide']);
                }else {
    //                Recupere user si déja existant
                    $user = $this->getDoctrine()->getRepository(User::class)
                        ->findUserByEmailOrToken($request->get('email'), $request->get('token'));
     
                    if (empty($user)) {
    //                    Création User si n'existe pas
                        $user = new User();
                        $formUser = $this->createForm(UserType::class);
     
                        if (!empty($data['email']) && !empty($data['token']) ){
                            $formUser->submit($request->get('email'))->get($request->get('token'));
                        }elseif (!empty($data['token'])){
                            $formUser->submit($request->get('token')) ;
                        }else{
                            $formUser->submit($request->get('email'));
                        }
     
                        if ($formUser->isValid()) {
    //                        $em = $this->getDoctrine()->getManager();
    //                        $em->persist($user);
    //                        $em->flush();
                            return $user;
                        } else {
    //                        return DefaultController::getErrorsAsArray($formUser);
                            return $formUser;
                        }
     
     
                    }
     
                }
     
            }else{
                return new JsonResponse(['message' => 'Token et email manquant'], Response::HTTP_BAD_REQUEST);
            }
     
     
     
     
    //  COMMANDE
         $commande = new Commande();
     
    // formulaire
         $formCommande = $this->createForm(CommandeType::class,$commande);
     
     
         $formCommande->submit($request->request->get('commande'));
     
         if ($formCommande->isValid()){
     
             $commande->setDateCommande(time()*1000);
             $commande->setUser($user);
           foreach ($commande->getCompositionCommande() as $item){
               $compo = new CompositionCommande();
               $compo->setCommande($commande);
     
     
            return $commande;
           }
         }else{
             return $formCommande;
         }
     
     
     
     
     
     
     
     
    //        return new JsonResponse(['message' => 'La commande à bien été crée']);
     
     
     
        }
    Mon userType :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    class UserType extends AbstractType
    {
        /**
         * {@inheritdoc}
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('email',EmailType::class,array('required' =>true))
                    ->add('telephone',null,array('required' =>false))
                    ->add('token',null,array('required' =>false));
     
        }/**
         * {@inheritdoc}
         */
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'AppBundle\Entity\User',
                'csrf_protection' =>false
            ));
        }
     
        /**
         * {@inheritdoc}
         */
        public function getBlockPrefix()
        {
            return 'appbundle_user';
        }
     
     
    }
    et CommandeType:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    class CommandeType extends AbstractType
    {
        /**
         * {@inheritdoc}
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('statut',null,array('required' =>false))
                    ->add('remarque',null,array('required' =>false))
                    ->add('compositionCommande',CollectionType::class,[
                        'entry_type' => CommandeType::class,
                        'allow_add' => true,
                        'error_bubbling'=> false,
                    ]);
        }/**
         * {@inheritdoc}
         */
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'AppBundle\Entity\Commande',
                'csrf_protection'=> false
     
            ));
        }
     
        /**
         * {@inheritdoc}
         */
        public function getBlockPrefix()
        {
            return 'appbundle_commande';
        }
     
     
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Avril 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Avril 2016
    Messages : 108
    Par défaut
    Petit up..

    Je suis tj bloqué sur ce probleme que j'avais du coup un peu laissé de coté, je remonte le sujet pour savoir si quelqu'un aurait un conseil..

    De mon coté voila ou j'en suis :

    Je pense finalement envoyer un Json de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    {
       "user":{
          "email":"anth06ny@gmail.com",
          "telephone":"0612234109",
          "token":"cf46c5ab-d797-40ab-ad7a-0604b5017e94"
       },
       "commande":{
          "dateCommande":0,
          "datePrevision":0,
          "id":0,
          "remarque":"",
          "statut":0,
          "compositionCommande": [
            {
                "product": {
                    "id": 1,
                    "name": "Le special",
                    "description": "Pain burger, sauce, tartare de légumes, salade fraîche, poulet rôti du Sud-ouest",
                    "price": "595",
                    "is_supp": false
                },
                "supplement": {
                        "id": 7,
                        "name": "Frites",
                        "description": null,
                        "price": "395",
                        "is_supp": true
     
                }
            }
         ]
       }
    }
    Donc en gros un User et une commande, comme ca je récupere les infos du User, je cherche si il existe sinon je crée un form et submit, la ca va.

    La ou j'ai plus de mal c'est pour le coté commande, je pense qu'il me manque une info, j'ai toujours : "This form should not contain extra fields."
    Avec product et supplement : "This value is not valid"

    Si quelqu'un passe par le , voici mon controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        /**
         * @Rest\View(serializerGroups={"composition"})
         * @Rest\Post("/testCommande")
         */
      public function testAction(Request $request){
     
    //      tableau de données
          $data = $request->request->all();
     
        $user = $this->getDoctrine()
                     ->getRepository(User::class)
                     ->findUserByEmailOrToken($data['user']['email'],$data['user']['token']);
     
     
     
        if (empty($user)){
            $user = new User();
            $formUser = $this->createForm(UserType::class,$user);
     
            $formUser->submit($request->request->get('user'));//Validation des données
     
            if ($formUser->isValid()){
    //            $em = $this->getDoctrine()->getManager();
    //            $em->persist($user);
    //            $em->flush();
     
                return $user;
     
            }else{
                return $formUser;
            }
     
     
        }
     
     
          $commande = new Commande();
     
        $formCommande = $this->createForm(CommandeType::class,$commande);
     
        $commande->setUser($user);
     
        $formCommande->submit($request->request->get('commande'));
     
        if ($formCommande->isValid()){
     
            return $commande;
        }else{
            return $formCommande;
        }
     
     
      }
    Mon formulaire de commande est toujours le même et j'ai crée un constructeur avec un Arraylist de compoCommande vide sur l'entité Commande.

    Cordialement,

Discussions similaires

  1. [2.x] [Formulaire] Créer une entité avec une relation ManyToMany
    Par SalutAVous dans le forum Symfony
    Réponses: 3
    Dernier message: 30/10/2012, 22h13
  2. créer une dll ressource avec vs 2005 ?
    Par trent94 dans le forum Débuter
    Réponses: 0
    Dernier message: 22/02/2010, 14h02
  3. [Débutant] créer nouveau avec relation
    Par gilgam dans le forum Ruby on Rails
    Réponses: 5
    Dernier message: 30/08/2007, 19h09
  4. Créer composant avec TQuery->pb suppression a la concepti
    Par marghett dans le forum Bases de données
    Réponses: 12
    Dernier message: 24/07/2004, 07h42
  5. Erreurs IIS avec Multiples Frames avec xmlrad
    Par powerlog dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/07/2003, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo