get('panier')); $panier->verification(); $panierSession = $session->get('panier'); // dd( $montant=$panier->montant()); $montant=$panier->montant(); return $this->render ('panier.html.twig',[ "panier"=> $panierSession, "montant"=>$montant, // dd($panierSession) ]); } /** * * @Route("/ajouter",name="panier_ajouter") */ public function panier_ajouter(Request $request,OeuvresRepository $repoOeuvre,Panier $panier) { /* dans la class request se trouve les superglobal la propriete request concerne $_PoST $request->request= $_POST pour accedr a des position de ce tbleau on utlise la methosde */ $idOeuvre = $request->request->get('oeuvre'); $quantity=$request->request->get('quantity'); $oeuvre=$repoOeuvre->find($idOeuvre); $panier->add($idOeuvre,$oeuvre->getPrix(),$quantity,$oeuvre->getPrix()); return $this->redirectToRoute("app_panier"); } /** * * @Route("/vider",name="panier_vider") */ public function panier_vider(Panier $panier) { $panier->vider(); return $this->redirectToRoute("app_panier"); } /** * * @Route("/retirer/{id}",name="panier_retirer") */ public function panier_retirer($id, Panier $panier) { $panier->remove($id); return $this->redirectToRoute("app_panier"); } /** * * @Route("/payer",name="panier_payer") */ public function panier_payer(Panier $panier) { $user=$this->getUser();//pour pouvoir acceder à cette fonction faut etre connecté $panier->paiement($user); $this->addFlash("success","commande prise en compte"); return $this->redirectToRoute("app_panier"); } /** * @Route("/commandes",name="mes_commandes") */ public function mesCommandes() { return $this->redirectToRoute('panier/mes_commandes.html.twig'); } } page htmll twig panier {% include "_flashes.html.twig" %} {% if panier.id is defined and panier.id|length > 0 %} {# #} {% set size = panier.id|length - 1 %} {% for i in 0.. size %} {% endfor %}
idtitreprix quantité total supprimer
{{ panier.id[i] }} {# {{panier.titre[i] }} #} {{panier.prix[i] }} {% if panier.quantity[i] %} {{panier.quantity[i] }}{{dump(panier.quantity)}} {% else %} indispo pour le moment {% endif %} {# {{panier.quantity[i] }} #} {# {{panier.prix[i] * panier.quantity[i] }} #}
montant total {{ montant}}€
vider le panier {% if app.user %} payer {% else %}

Veuillez vous connecter ou vous inscrire pour déposer votre message

{% endif %} {% endif %} panier.php session=$session; $this->repoOeuvre=$repoOeuvre; $this->manager=$manager; } public function creation(){ $array=[ 'id'=>[], 'prix'=>[], 'quantity'=>[], // 'titre'=>[] ]; return $array; } public function add($id,$prix,$quantity) { $panier=$this->session->get('panier'); $panier->verification(); if(empty($panier)) { $panier=$this->creation(); $this->session->set('panier',$panier); } $position_search=array_search($id,$panier['id'] ); if($position_search!==false) { // dd('quantity'); $panier['quantity'][$position_search]+=$quantity; } else{ $panier['id'][]=$id; $panier['prix'][]=$prix; $panier['quantity'][]=$quantity; // $panier['titre'][]=$titre; } $this->session->set('panier',$panier); } public function vider() { $panier=$this->creation(); $this->session->set('panier',$panier); } public function remove($id) { $panier=$this->session->get('panier'); $position=array_search($id,$panier['id'] ); array_splice($panier['id'],$position,1 ); // array_splice($panier['titre'],$position,1 ); array_splice($panier['prix'],$position,1 ); array_splice($panier['quantity'],$position,1); $this->session->set('panier',$panier); } public function montant() { $montant=0; $panier=$this->session->get('panier'); $size = count($panier['id'] ); for ($i=0;$i<$size;$i++) { // dd( $panier); if (is_numeric($panier['quantity'][$i]) && is_numeric($panier['prix'][$i])) { $montant +=$panier['quantity'][$i]*$panier['prix'][$i]; // dump($montant); } } $montant=round($montant,2); return $montant; } public function verification() { $panier=$this->session->get('panier'); $size=count($panier['id'] ); for ($i=0;$i<$size;$i++) { $oeuvre=$this->repoOeuvre->find($panier['id'][$i] ); if($oeuvre->getStock()) { if($oeuvre->getStock() < $panier ['quantity'][$i] ) { $oeuvre['quantity'][$i]=$oeuvre->getStock(); } } else { $panier['quantity'][$i]=0; } } $this->session->set('panier',$panier); } public function paiement($user) { $this->verification(); $panier=$this->session->get('panier'); $size=count($panier['id'] ); $acces=false; for($i=0; $i<$size;$i++)// si $i ! 0 alors acces is true { if($panier['quantity'][$i] ) { $acces=true; } } if($acces) { $commande=new Commande; $commande->setUser($user); $commande->setMontant($this->montant()); $commande->setDateAt(new \DateTimeImmutable('now')); $commande->setEtat(0);// 0=en cours de tratement; 1 expedié;2 livré $this->manager->persist($commande); $this->manager->flush(); for($i=0;$i < $size;$i++) { if($panier['quantity'][$i] ) { $oeuvre=$this->repoOeuvre->find($panier['id'][$i] ); $detail=new DetailsCommande; $detail->setCommande($commande); $detail->setOeuvre($oeuvre); $detail->setQuantity($panier['quantity'][$i] ); $detail->setPrix($panier['prix'][$i] ); $this->manager->persist($detail); $this->manager->flush(); $stockBdd=$oeuvre->getStock(); $newStock=$stockBdd - $panier['quantity'][$i]; $oeuvre->setStock($newStock); $this->manager->persist($oeuvre); $this->manager->flush(); $this->remove($panier['id'][$i] ); } } } } }