src/Controller/DefaultController.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Menu;
  4. use App\Entity\Restaurante;
  5. use App\Enum\DietTag;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. class DefaultController extends AbstractController
  11. {
  12.     public function index(Request $request, ManagerRegistry $doctrine): Response
  13.     {
  14.         return $this->render('default/index.html.twig',);
  15.     }
  16.     public function menus(Request $request, ManagerRegistry $doctrine): Response
  17.     {
  18.         // Price
  19.         $precioMax = 50;
  20.         if ($request->request->get('precioMax')) {
  21.             $precioMax= (int) $request->request->get('precioMax');
  22.         }
  23.         // Distance
  24.         $distanciaMax = 50;
  25.         if ($request->request->get('distanciaMax')) {
  26.             $distanciaMax = (int) $request->request->get('distanciaMax');
  27.         }
  28.         // Location
  29.         $latitude = '';
  30.         $longitude = '';
  31.         if ($request->request->get('latActual') && $request->request->get('lngActual')) {
  32.             $latitude = $request->request->get('latActual');
  33.             $longitude = $request->request->get('lngActual');
  34.         }
  35.         $menuRepository = $doctrine->getRepository(Menu::class);
  36.         $diets = $this->requestedDiets($request);
  37.         $menus = $menuRepository->findNearByActiveAndPrice(
  38.             floatval($latitude),
  39.             floatval($longitude),
  40.             $distanciaMax,
  41.             $precioMax,
  42.             diets: $diets
  43.         );
  44.         
  45.         return $this->render('default/menus.html.twig', [
  46.             'menus' => $menus,
  47.             'precioMax' => $precioMax,
  48.             'distanciaMax' => $distanciaMax,
  49.             'latActual' => $latitude,
  50.             'lngActual' => $longitude,
  51.             'dietTags' => DietTag::cases(),
  52.             'diets' => $diets,
  53.         ]);
  54.     }
  55.     public function restaurants(Request $request, ManagerRegistry $doctrine): Response
  56.     {
  57.         // Price
  58.         $precioMax = 50;
  59.         if ($request->request->get('precioMax')) {
  60.             $precioMax= (int) $request->request->get('precioMax');
  61.         }
  62.         // Distance
  63.         $distanciaMax = 50;
  64.         if ($request->request->get('distanciaMax')) {
  65.             $distanciaMax = (int) $request->request->get('distanciaMax');
  66.         }
  67.         // Location
  68.         $latitude = '';
  69.         $longitude = '';
  70.         if ($request->request->get('latActual') && $request->request->get('lngActual')) {
  71.             $latitude = $request->request->get('latActual');
  72.             $longitude = $request->request->get('lngActual');
  73.         }
  74.         $restaurantRepository = $doctrine->getRepository(Restaurante::class);
  75.         $restaurants = $restaurantRepository->findNearByActive(floatval($latitude), floatval($longitude), $distanciaMax);
  76.         
  77.         return $this->render('default/restaurants.html.twig', [
  78.             'restaurants' => $restaurants,
  79.             'precioMax' => $precioMax,
  80.             'distanciaMax' => $distanciaMax,            
  81.             'latActual' => $latitude,
  82.             'lngActual' => $longitude
  83.         ]);
  84.     }
  85.     public function showRestaurant(ManagerRegistry $doctrine, $id)
  86.     {
  87.         $restaurant = $doctrine->getRepository(Restaurante::class)->findOneBy(['id' => $id]);
  88.         $googlePlaceDetails = [];
  89.         $arrayData = json_decode($restaurant->getPlaceDetails(), true); // json object to array conversion
  90.         if (isset($arrayData['result'])) {
  91.             $googlePlaceDetails = $arrayData['result'];
  92.         }
  93.         return $this->render('default/showRestaurant.html.twig', array('restaurant' => $restaurant, 'googlePlaceDetails' => $googlePlaceDetails));
  94.     }
  95.     /**
  96.      * The diets ticked in the filter form. Unlike the API, a value that is not a known diet is dropped
  97.      * instead of rejected: the page has no way to show the diner an error.
  98.      *
  99.      * @return list<DietTag>
  100.      */
  101.     private function requestedDiets(Request $request): array
  102.     {
  103.         // all() without a key: all('diet') throws a 400 when a hand-edited form sends a scalar.
  104.         $submitted = $request->request->all()['diet'] ?? [];
  105.         if (!\is_array($submitted)) {
  106.             return [];
  107.         }
  108.         $diets = [];
  109.         foreach ($submitted as $value) {
  110.             $diet = \is_string($value) ? DietTag::tryFrom($value) : null;
  111.             if (null !== $diet && !\in_array($diet, $diets, true)) {
  112.                 $diets[] = $diet;
  113.             }
  114.         }
  115.         return $diets;
  116.     }
  117. }