src/Core/Service/RouteHistory.php line 40

  1. <?php
  2. namespace App\Core\Service;
  3. use App\Core\Model\RouteData;
  4. use App\Core\Model\RouteDataInterface;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. class RouteHistory implements RouteHistoryInterface
  8. {
  9.     private RequestStack $requestStack;
  10.     public function __construct(RequestStack $requestStack)
  11.     {
  12.         $this->requestStack $requestStack;
  13.     }
  14.     /**
  15.      * Process given request.
  16.      */
  17.     public function processRequest(Request $request): void
  18.     {
  19.         if (true === $request->isXmlHttpRequest()) {
  20.             return;
  21.         }
  22.         $session $request->getSession();
  23.         $routeName $request->get('_route');
  24.         if ('_' === $routeName[0]) {
  25.             return;
  26.         }
  27.         $routeParams $request->get('_route_params');
  28.         $routeData = ['name' => $routeName'params' => $routeParams];
  29.         // Do not save same matched route twice
  30.         $thisRoute $session->get('_route_history.this_route', []);
  31.         if ($thisRoute == $routeData) {
  32.             return;
  33.         }
  34.         $session->set('_route_history.last_route'$thisRoute);
  35.         $session->set('_route_history.this_route'$routeData);
  36.     }
  37.     /**
  38.      * Returns route data for last route.
  39.      *
  40.      * @return RouteDataInterface
  41.      */
  42.     public function getLastRoute(): ?RouteDataInterface
  43.     {
  44.         $routeData $this->requestStack->getSession()->get('_route_history.last_route');
  45.         if (null === $routeData) {
  46.             return $routeData;
  47.         }
  48.         return new RouteData($routeData);
  49.     }
  50.     /**
  51.      * Returns route data for current route.
  52.      */
  53.     public function getThisRoute(): RouteDataInterface
  54.     {
  55.         return new RouteData($this->requestStack->getSession()->get('_route_history.this_route'));
  56.     }
  57. }