src/Controller/DefaultController.php line 99
<?phpnamespace App\Controller;use App\Entity\Brand;use App\Entity\Image;use App\Entity\Product;use App\Form\AddProductToCartType;use App\Form\SearchFormType;use App\Repository\ModelRepository;use App\Service\Cart\CartService;use Doctrine\ORM\EntityManagerInterface;use Knp\Component\Pager\PaginatorInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\Routing\Annotation\Route;class DefaultController extends AbstractController{#[Route('/', name: 'home')]public function index(EntityManagerInterface $manager, Request $request): Response{$brands = $manager->getRepository(Brand::class)->findAllBrandLogos();$recently_added_products = $manager->getRepository(Product::class)->findRecentlyAddedProducts();//formulaire de recherche multicritère$search_form = $this->createForm(SearchFormType::class);$search_form->handleRequest($request);if ($search_form->isSubmitted() && $search_form->isValid()) {$formData = $search_form->getData();$brandId = $formData['brand'];$modelId = $formData['product_model'];$keyword = $formData['search'];if($modelId == null) {$modelId = 0;}if($keyword == null) {$keyword = "";}$request->getSession()->set('search_parameters', ['brandId' => $brandId,'modelId' => $modelId,'keyword' => $keyword,]);// Redirection vers la page des résultats de recherchereturn $this->redirectToRoute('search_results');}return $this->render('default/index.html.twig', ['controller_name' => 'DefaultController','brands' => $brands,'recently_added_products' => $recently_added_products,'form' => $search_form->createView(),]);}#[Route('/product_details/{id}', name: 'product_details', requirements: ["id"=>"\d+"])]public function productDetails($id, EntityManagerInterface $manager, Request $request, CartService $cartService): Response{$selected_product = $manager->getRepository(Product::class)->findProductById($id);$images = $manager->getRepository(Image::class)->findProductImages($id);$item = new Product();$form = $this->createForm(AddProductToCartType::class, $item, ['selected_product' => $selected_product]);$form->handleRequest($request);//Ajout d'un produit au panierif($form->isSubmitted() && $form->isValid()) {$data = $form->getData();$productQuantity = $data->getProductQuantity();$res = $cartService->add($id, $productQuantity);if($res === false) {return new JsonResponse(['success' => false]);} else {return new JsonResponse(['success' => true]);}}return $this->render('default/product_details.html.twig', ['controller_name' => 'DefaultController','selected_product' => $selected_product,'images' => $images,'form' => $form->createView()]);}#[Route('/search_results', name: 'search_results')]public function searchResults(Request $request, PaginatorInterface $paginator, EntityManagerInterface $manager): Response{//$tags = $manager->getRepository(Tag::class)->findAll();//formulaire de recherche multicritère$search_form = $this->createForm(SearchFormType::class);$search_form->handleRequest($request);if ($search_form->isSubmitted() && $search_form->isValid()) {$formData = $search_form->getData();$brandId = $formData['brand'];$modelId = $formData['product_model'];$keyword = $formData['search'];if($modelId == null) {$modelId = 0;}if($keyword == null) {$keyword = "";}$request->getSession()->set('search_parameters', ['brandId' => $brandId,'modelId' => $modelId,'keyword' => $keyword,]);}// Retrieve the search parameters from the session$searchParameters = $request->getSession()->get('search_parameters');$brandId = $searchParameters['brandId'];$modelId = $searchParameters['modelId'];$keyword = $searchParameters['keyword'];// Retrieve the selected filter from the query parameter$filter = $request->query->get('filter');$queryBuilder = $manager->getRepository(Product::class)->search($brandId, $modelId, $keyword);// Retrieve the selected tags from the query parameter/* $tagIds = $request->query->get('tags');$selectedTags = explode(',', $tagIds);$selectedTags = array_map('intval', $selectedTags);// Apply the tag filterif (count($selectedTags) > 0 && $selectedTags[0] !== 0) {$request->getSession()->set('selected_tags', $selectedTags);$queryBuilder->innerJoin('p.product_tags', 't');$queryBuilder->andWhere('t.id IN (:tagIds)');$queryBuilder->setParameter('tagIds', $selectedTags);}*/if ($filter) {switch ($filter) {case 'newest':// Sort by newest products$queryBuilder->orderBy('p.product_added_date', 'DESC');break;case 'oldest':// Sort by oldest products$queryBuilder->orderBy('p.product_added_date', 'ASC');break;case 'asc_price':// Sort by cheapest products$queryBuilder->orderBy('p.product_price', 'ASC');break;case 'desc_price':// Sort by most expensive products$queryBuilder->orderBy('p.product_price', 'DESC');break;}}$query = $queryBuilder->getQuery();$pagination = $paginator->paginate($query,$request->query->getInt('page', 1), // Current page number12 // Number of items per page);return $this->render('default/search_results.html.twig', ['controller_name' => 'DefaultController','results' => $pagination,'keyword'=> $keyword,'form' => $search_form->createView(),]);}#[Route('/brand/{id}', name: 'brand', requirements: ["id"=>"\d+"])]public function searchResultsByBrand(int $id, Request $request){$request->getSession()->set('search_parameters', ['brandId' => $id,'modelId' => 0,'keyword' => "",]);// Redirection vers la page des résultats de recherchereturn $this->redirectToRoute('search_results');}#[Route('/keyword', name: 'keyword')]public function searchResultsByKeyword(Request $request){$keyword = $request->request->get('keyword');$request->getSession()->set('search_parameters', ['brandId' => 0,'modelId' => 0,'keyword' => $keyword,]);// Redirection vers la page des résultats de recherchereturn $this->redirectToRoute('search_results');}#[Route('/fetch_models', name: 'fetch_models')]public function fetchModels(Request $request, ModelRepository $modelRepository): JsonResponse{$brandId = $request->request->get('brandId');$models = $modelRepository->findByBrand($brandId);$modelChoices = [];foreach($models as $model){$modelChoices[$model->getModelName()] = $model->getId();}return new JsonResponse($modelChoices);}#[Route('/legal_terms', name: 'legal_terms')]public function legalTerms(): Response{return $this->render('default/legal_terms.html.twig', ['controller_name' => 'DefaultController',]);}}