Bonjour à tous voici ma problématique.
J'ai 3 entités :
Livraison = ce sont des livraisons des produits
Ligne_liv = la ligne représentant chaque produit livré concernant une Livraison donnée
Produit = produit livré
L'entité Ligne_liv a une clé composée des ID de Livraison (livId) et Produit (proId).
Mon but est, sur seul formulaire, en l'occurrence Livraison , je puisse enregistrer non seulement une Livraison mais avec les différentes ligne_liv en utilisant Ajax pour ajouter à volonté les lignes de Livraison.
Livraison.php (entité de livraison)
Produit.php (Entité de produit)
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 /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="ZG\ZagabaBundle\Entity\Exercice", cascade={"persist"}) * @ORM\JoinColumn(name="Exe_id", referencedColumnName="id", nullable=false) */ private $exeId; /** * @ORM\ManyToOne(targetEntity="ZG\ZagabaBundle\Entity\Commande_externe", cascade={"persist"}) * @ORM\JoinColumn(name="Com_id", referencedColumnName="id", nullable=false) */ private $comId; /** * @ORM\OneToMany(targetEntity="ZG\ZagabaBundle\Entity\Ligne_liv", mappedBy="livId", cascade={"persist"}) */ private $lignelivraison;
Ligne_liv.php (Entité de ligne livraison)
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 /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="ZG\ZagabaBundle\Entity\Categorie_prod", inversedBy="produit", cascade={"persist"}) * @ORM\JoinColumn(name="Cat_id", referencedColumnName="id", nullable=false) */ private $catId; /** * @ORM\OneToMany(targetEntity="ZG\ZagabaBundle\Entity\Ligne_liv", mappedBy="proId") */ private $lignelivraison;
LivraisonType.php (formulaire de livraison)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /** * @ORM\Id @ORM\ManyToOne(targetEntity="ZG\ZagabaBundle\Entity\Produit", inversedBy="lignelivraison", cascade={"persist"}) * @ORM\JoinColumn(name="Pro_id", referencedColumnName="id", nullable=false) * */ private $proId; /** * @ORM\Id @ORM\ManyToOne(targetEntity="ZG\ZagabaBundle\Entity\Livraison", inversedBy="lignelivraison", cascade={"persist"}) * @ORM\JoinColumn(name="Liv_id", referencedColumnName="id", nullable=false) * */ private $livId;
Ligne_livType.php (formulaire de ligne livraison)
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 /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('dateLiv', DateType::class) ->add('exeId', EntityType::class, array( 'class' => 'ZGZagabaBundle:Exercice', 'choice_label' => 'id', 'placeholder' => 'Sélectionnez un Exercice', )) ->add('comId', EntityType::class, array( 'class' => 'ZGZagabaBundle:Commande_externe', 'choice_label' => 'num_cmd', 'placeholder' => 'Sélectionnez une Commande', )) ->add('lignelivraison', CollectionType::class, array( 'entry_type' => Ligne_livType::class, 'allow_add' => true, 'allow_delete' => true )) //->add('ligliv', Ligne_livType::class) ->add('enregistrer', SubmitType::class) ->add('annuler', ResetType::class);; }
Controleur ( fonction qui permet d'ajouter la Livraison)
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 /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('qte', IntegerType::class) ->add('proId', EntityType::class, array( 'class' => 'ZGZagabaBundle:Produit', 'choice_label' => 'nom', 'placeholder' => 'Sélectionnez un Produit', )) ->add('livId', EntityType::class, array( 'class' => 'ZGZagabaBundle:Livraison', 'choice_label' => 'id', 'placeholder' => 'Sélectionnez un Produit', )); }
Je veux que:
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 public function livAddAction(Request $request) { $livraison = new Livraison; $form = $this->get('form.factory')->create(LivraisonType::class, $livraison); if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($livraison); $em->flush(); $request->getSession()->getFlashBag()->add('notice', 'Livraison bien enregistrée.'); return $this->redirectToRoute('liv_list'); } return $this->render('ZGZagabaBundle:Template:livAdd.html.twig', array( 'form' => $form->createView() )); }
- l'ID de Livraison dans l'entité Ligne_liv ne soit pas affiché et sélectionné par l'utilisateur, mais plutôt récupérer automatique dans Livraison
- L'ID de produit soit récupéré en fonction du choix de l'utilisateur
quand j'essai d'enregistrer, j'ai cette erreur:
The controller for URI "/" is not callable. Expected method "prodFindAction" on class "ZG\ZagabaBundle\Controller\MainController", did you mean "livFindAction", "prodAddAction", "prodDelAction", "prodFinfAction", "prodListAction", "prodUpAction"?
Partager