src/BusApi/BusRouteController.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\BusApi;
  3. use App\Entity\Bus\Route;
  4. use Doctrine\Persistence\ManagerRegistry;
  5. use Doctrine\Persistence\ObjectManager;
  6. use FOS\RestBundle\Controller\AbstractFOSRestController;
  7. use JMS\Serializer\SerializationContext;
  8. use JMS\Serializer\SerializerBuilder;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use JMS\Serializer\Annotation as JMS;
  14. use FOS\RestBundle\Controller\Annotations as Rest;
  15. class BusRouteController extends AbstractFOSRestController
  16. {
  17. private ManagerRegistry $registry;
  18. private ObjectManager $entityManager;
  19. private RequestStack $requestStack;
  20. public function __construct(ManagerRegistry $registry, RequestStack $requestStack)
  21. {
  22. $this->entityManager = $registry->getManager();
  23. $this->requestStack = $requestStack;
  24. }
  25. /**
  26. * @Rest\Route("/routes",methods={"GET","OPTIONS"}, name="apiRoutesHome")
  27. */
  28. public function routesHome(Request $request)
  29. {
  30. $em = $this->entityManager;
  31. $serializer = SerializerBuilder::create()->build();
  32. $context = new SerializationContext();
  33. $context->setSerializeNull(true)
  34. ->enableMaxDepthChecks();
  35. // $routes = $em->getRepository(Route::class)->findAll();
  36. $sql = "SELECT a.id as route_id,b.id as stop_id,c.station_name,b.departure_time,b.eta,d.station_name as origin_station, c.id as station_id FROM bus_route a
  37. JOIN bus_stop b ON b.route_id = a.id
  38. JOIN station c ON c.id = b.station_id
  39. JOIN station d ON d.id = a.origin";
  40. $stmt = $em->getConnection()->prepare($sql);
  41. $routes = $stmt->executeQuery()->fetchAllAssociative();
  42. $data = $serializer->serialize($routes, 'json', $context);
  43. return new Response($data, Response::HTTP_OK);
  44. }
  45. }