Linux SRV-16 6.18.44-paas #1 SMP PREEMPT_DYNAMIC Thu Aug 13 10:08:12 UTC 2026 x86_64
/
srv
/
data
/
trash
/
vhost_www.bachtale.com_1719306535
/
htdocs
/
src
/
Controller
/
Front
/
/srv/data/trash/vhost_www.bachtale.com_1719306535/htdocs/src/Controller/Front/ProductController.php
<?php namespace App\Controller\Front; use App\Entity\Product; use App\Form\ProductType; use App\Twig\AppExtension; use App\Form\ProductFilterType; use Symfony\Component\Asset\Package; use App\Repository\ProductRepository; use Knp\Component\Pager\PaginatorInterface; use Symfony\Component\Serializer\Serializer; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Asset\VersionStrategy\JsonManifestVersionStrategy; class ProductController extends AbstractController { /** * @Route("/nos-bijoux", name="product_search", methods="GET") */ public function search(ProductRepository $productRepository, Request $request,Session $session, AppExtension $appExtension): Response { $products = new Product(); $form = $this->createForm(ProductFilterType::class, $products); $form->handleRequest($request); $session->clear('search_session'); $products = $productRepository->findBy(['isActive' => true], ['updatedAt' => 'DESC']); return $this->render('front/product/search.html.twig', [ 'products' => $products, 'form' => $form->createView(), 'slug'=>'product', ]); } /** * @Route("/bijou/{category}/{id}/{title}", name="product_read", methods="GET") */ public function read(ProductRepository $productRepository, int $id): Response { $product = $productRepository->findOneBy(['id' => $id]); return $this->render('front/product/read.html.twig', [ 'product' => $product, 'slug'=>'product', ]); } /** * @Route("/filtre/{action}/{id}/{type}", name="product_filter", methods="GET") */ public function filter(int $id, string $type, string $action, Session $session, ProductRepository $productRepository, Request $request, AppExtension $appExtension) { $filters = $session->get('search_session'); $newFilter = ['type' => $type, 'id' => $id]; if($action == 'checked'){ $filters[] = $newFilter; $session->set('search_session', $filters); }else{ foreach($filters as $key => $filter){ if($filter['type'] == $newFilter['type'] && $filter['id'] == $newFilter['id']){ unset($filters[$key]); break; } } $session->set('search_session', array_values($filters)); } $sessionSearch = $session->get('search_session'); $filterProducts = $productRepository->findByFilter($sessionSearch); $normalizers = [new ObjectNormalizer()]; $serializer = new Serializer($normalizers); // On transforme notre objet en tableau $dataArray = $serializer->normalize($filterProducts, null, [ 'ignored_attributes' => [ 'product', 'products', 'content', 'createdAt', 'updatedAt' ] ]); $absPath = $this->getParameter('kernel.project_dir').'/public/'; $package = new Package(new JsonManifestVersionStrategy($absPath.'build/manifest.json')); $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath(); foreach($dataArray as &$data){ foreach($data['images'] as $key => $image){ if($key == 0){ $data['imageLink'] = $baseurl.$package->getUrl('/media/cache/thumb/upload/product/'.$image['imageName']); break; } } $data['link'] = $this->generateUrl('product_read', [ 'category'=>$appExtension->myUrlEncode($data['category']['title']), 'id'=>$data['id'], 'title'=>$appExtension->myUrlEncode($data['title']), ] , UrlGeneratorInterface::ABSOLUTE_URL); } $data = json_encode($dataArray, true); return new Response($data, 200, ['Content-Type' => 'application/json']); } }