Bonjour à tous,
1/ Je cherche à savoir comment injecter les deux variables $dateClient et $heureClient provenant d'un formulaire en tant que variables dans ma fonction checkerExistenceCreneau, puis déclencher ladite fonction au submit du formulaire... Doit on apeller la fonction du repository dans le controller, dans le form ou dans le service .?
Ca doit être simple mais avec la fatigue, je n'y arrive pas
2/ Suite à la soumission, le résultat de la requête ajax doit être renvoyée dans le formulaire pour signaler au client si la création de la réservation est possible ou non... Pour cela j'ai fait des echos et return false/true dans une fonction très longue dont voici un extrait, il faut alors que je puisse récupérer là où le code a stoppé en php pour pouvoir bloquer ou continuer la soumission du formulaire :
Merci bcp d'avance pour toute aide
ReservationsController :
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 //Requête qui rapatrie les créneaux et nbr de couverts pour le jour et heure choisis : // $heureClient = new \DateTime($heureClient); $q2 = $this->createQueryBuilder('c') ->setParameters([ 'idcreneau' => $idCreneau, 'heureclient' => $heureClient ]) //Check sur lundi matin ->select($select1) ->andWhere($where1) ->andWhere('c.id = :idcreneau') ->getQuery() ->getResult(); //Check creneau du soir $q3 = $this->createQueryBuilder('c') ->setParameters([ 'idcreneau' => $idCreneau, 'heureclient' => $heureClient ]) ->select($select2) ->andWhere($where2) ->andWhere('c.id = :idcreneau') ->getQuery() ->getResult(); if ($q2 != null || $q3 != null) { //Calcul de la soustraction d'une heure avant la fermeture du restaurant: // $newHeureMidi=new DateTime(); // $topMidi=date("H:i:s",strtotime("-1 hour $q2[0][$moins1hmidi]")); // dd(date("H:i:s",strtotime($q2[0][$moins1hmidi]))); //$newHeureSoir= $q3[0][$moins1hsoir]; // echo($newHeureSoir); echo "Un créneau pour ce {$nomjour} " . date("d-m-Y", strtotime($dateClient)) . ' à ' . date('H:i', strtotime($heureClient)) . " a été trouvé."; return true; } else { echo "Aucun créneau pour ce {$nomjour} " . date("d-m-Y", strtotime($dateClient)) . ' à ' . date('H:i', strtotime($heureClient)) . " n'a été trouvé."; return false; } return $q1; } else { echo ("Aucun créneau libre de réservation n'a été trouvé, veuillez choisir un autre jour ou consulter la liste des créneaux disponibles en cliquant sur le link qui s'affiche en bas de ce formulaire."); } } }
ReservationsService
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 //Ajout d'une réservation par le client lui-même, le ramène sur sa liste de réservation si validation #[Route('/ajout-reservation-par-client', name: 'app_reservation_par_client_new', methods: ['GET', 'POST'])] public function newParClient(Request $request, ReservationsRepository $reservationsRepo,CreneauxRepository $creneauxRepo,ReservationsService $reservationsService): Response { $reservation = new Reservations(); $reservation->setClient($this->getUser()); $form = $this->createForm(ReservationsType::class, $reservation); $form->handleRequest($request); $dateClient=$request->get('reservations_Date'); $heureClient=$request->get('reservations_Heure'); dd($dateClient,$heureClient); if ($form->isSubmitted() && $form->isValid()) { return $reservationsService->handleFormData($form); // $reservationsRepo->save($reservation, true); // $this->addFlash('alert alert-success', 'Votre réservation a bien été prise en compte ! , nous vous avons envoyé une confirmation, vérifiez votre boîte mail.'); // return $this->redirectToRoute('app_reservations_par_client', [], Response::HTTP_SEE_OTHER); }
Resevations.js :
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 <?php namespace App\Service; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\JsonResponse; class ReservationsService { public function __construct(private EntityManagerInterface $em) { } public function handleFormData(FormInterface $formData): JsonResponse { if ($formData->isValid()) { return $this->handleValidForm($formData); } else { return $this->handleInvalidForm($formData); } } public function handleValidForm(FormInterface $formData): JsonResponse { $formData = $formData->getData(); // dd($formData); $this->em->persist($formData); $this->em->flush(); return new JsonResponse([ 'html' => '' ]); } public function handleInvalidForm(): JsonResponse { return new JsonResponse([ 'message' => 'invalid form' ]); } }
CreneauxRepository :
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 window.onload=()=>{ const formReservations=document.querySelector('#reservations') formReservations.addEventListener('submit',(e)=>{ e.preventDefault fetch(this.action,{ body:new FormData(e.target), method:"POST" }).then(response=>response.json()) .then(json=>{ }) }) }
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 //Requête qui rapatrie les créneaux et nbr de couverts pour le jour et heure choisis : // $heureClient = new \DateTime($heureClient); $q2 = $this->createQueryBuilder('c') ->setParameters([ 'idcreneau' => $idCreneau, 'heureclient' => $heureClient ]) //Check sur lundi matin ->select($select1) ->andWhere($where1) ->andWhere('c.id = :idcreneau') ->getQuery() ->getResult(); //Check creneau du soir $q3 = $this->createQueryBuilder('c') ->setParameters([ 'idcreneau' => $idCreneau, 'heureclient' => $heureClient ]) ->select($select2) ->andWhere($where2) ->andWhere('c.id = :idcreneau') ->getQuery() ->getResult(); if ($q2 != null || $q3 != null) { //Calcul de la soustraction d'une heure avant la fermeture du restaurant: // $newHeureMidi=new DateTime(); // $topMidi=date("H:i:s",strtotime("-1 hour $q2[0][$moins1hmidi]")); // dd(date("H:i:s",strtotime($q2[0][$moins1hmidi]))); //$newHeureSoir= $q3[0][$moins1hsoir]; // echo($newHeureSoir); echo "Un créneau pour ce {$nomjour} " . date("d-m-Y", strtotime($dateClient)) . ' à ' . date('H:i', strtotime($heureClient)) . " a été trouvé."; return true; } else { echo "Aucun créneau pour ce {$nomjour} " . date("d-m-Y", strtotime($dateClient)) . ' à ' . date('H:i', strtotime($heureClient)) . " n'a été trouvé."; return false; } return $q1; } else { echo ("Aucun créneau libre de réservation n'a été trouvé, veuillez choisir un autre jour ou consulter la liste des créneaux disponibles en cliquant sur le link qui s'affiche en bas de ce formulaire."); } } }
Partager