Bonjour à tous !
J'utilise Symfony 4.3 mais je ne pense pas que le problème vienne d'une spécificité du framework mais plus d'un point technique de PHP.
Afin de réaliser un traitement différencié je souhaite compter le nombre d'élément dans deux arrays. Le souci c'est que selon mes tests (avec les throw Exception()) Les 2 tableaux comportent toujours exactement le même nombre d'élément.
J'utilise la fonction count(array $monArray) pour effectuer le comptage.
Je vous joins le code
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
public function edit(Request $request, Reparation $reparation, \Swift_Mailer $mailer): Response
    {
        $this->denyAccessUnlessGranted('EDIT', $reparation);
        $user = $this->getUser();
        $form = $this->createForm(ReparationType::class, $reparation);
        $form->handleRequest($request);
        // va servire pour la comparaison des produits et dont si le stockNotifier se déclanche
        $produits = $reparation->getProduits();
        $listeProduits1[] = null;
        foreach ($produits as $produit) {
          array_push($listeProduits1, $produit->getId());
        }
 
        if ($form->isSubmitted() && $form->isValid()) {
          $entityManager = $this->getDoctrine()->getManager();
            $etatReparation = $form->get('statu')->getData();
            $produits = $reparation->getProduits();
 
            foreach ($produits as $produit) {
              $reparation->addProduit($produit);
              $produit->addReparation($reparation);
              $this->getDoctrine()->getManager()->persist($produit);
            }
 
            $this->getDoctrine()->getManager()->persist($reparation);
            $this->getDoctrine()->getManager()->flush();
 
            }
            /* une fois que toutes les données sont persist et flush
             * je vais faire en sorte de déterminer les action sur les $produits
             * et si les quantité sont dans les alertes envoyer un email au garagiste
             */
             $produits = $reparation->getProduits();
             $listeProduits2[] = null;
             foreach ($produits as $produit) {
               array_push($listeProduits2, $produit->getId());
             }
 
             if (count($listeProduits1) == count($listeProduits2)) {
               throw new \Exception("lp1 = lp2", 1);
               //faire le array_diff dans n'importe quel sens.
             }
 
             elseif (count($listeProduits1) > count($listeProduits2)) {
               throw new \Exception("lp1 > lp2", 1);
 
               // cas où il y a trop de produit dans l'édition de la réparation. Il les enlever et les remettre dans le stock
               $listeProduitdefinitive = array_diff($listeProduits1, $listeProduits2); // différence entre les deux listes
 
               foreach ($listeProduitdefinitive as $produit) {
                 $quantite = $produit->getQuantite();
                 $produit->setQuantite($quantite+1);
                 $entityManager->persist($produit);
                 }
 
               }elseif (count($listeProduits1) < count($listeProduits2)) {
                 throw new \Exception("lp1 < lp2", 1);
 
                 // cas où la réparation ne compte pas assez de produits par rapport a la meme réparation passer durant l'édition
                 // il faut déduire des stock la nouvelle quantité pour chaque produits
                 $listeProduitdefinitive = array_diff($listeProduits2, $listeProduits1);
                 foreach ($listeProduitdefinitive as $produit) {
                   $quantite = $produit->getQuantite();
                   if ($quantite <=0 ) {
                     $quantite = 0;
                   }else {
                     $quantite = $quantite - 1;
                   }
                   $produit->setQuantite($quantite);
                   $entityManager->persist($produit);
                 }
               }else {
                 throw new \Exception("Aucun des cas ne correspondent", 1);
 
               }
 
            return $this->redirectToRoute('reparation_index');
        }
 
        return $this->render('reparation/edit.html.twig', [
            'reparation' => $reparation,
            'form' => $form->createView(),
            'user' => $user,
        ]);
    }
En espérant que vous pourrez m'aider !
Merci