<?php
namespace App\Controller;
use FOS\HttpCacheBundle\CacheManager;
use FOS\HttpCacheBundle\Configuration\InvalidateRoute;
use FOS\HttpCacheBundle\Configuration\Tag;
use FOS\HttpCacheBundle\Http\SymfonyResponseTagger;
use Psr\Container\ContainerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Cache\TagAwareCacheInterface;
/**
* @Route("/website")
*/
class WebsiteController extends AbstractController
{
/**
* @Route("/_navbar_side_menu", name="website.navbar_side_menu")
*
* @Cache(smaxage="3600", public="true")
* @Tag("navbar", "static_page")
*/
public function navbarSideMenu(): Response
{
return $this->render('themes/theme-5/_partials/navbar.html.twig');
}
/**
* @Route("/_menu", name="website.menu")
*/
public function index(): Response
{
$response = $this->render('themes/theme-5/_partials/navbar.html.twig');
$response->setSharedMaxAge(3600);
// $response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER, 'true');
return $response;
}
/**
* @Route("/_footer", name="website.footer")
* @Cache(smaxage="3600", public="true")
* @Tag("static_page")
*/
public function footer(Request $request, SymfonyResponseTagger $symfonyResponseTagger): Response
{
$symfonyResponseTagger->addTags(['navbar', 'static_page']);
return $this->render('themes/theme-5/_partials/footer.html.twig');
}
/**
* @Route("/_invalidate_route", name="website.invalidate_route")
*/
public function invalidateRoute(Request $request, CacheManager $cacheManager): JsonResponse
{
$token = $request->headers->get('X-Invalidation-Token');
if ($this->getParameter('rewyer_api_key') !== $token) {
return $this->json(['status' => Response::HTTP_UNAUTHORIZED]);
}
if ($request->isMethod('POST')) {
$routes = json_decode($request->getContent(), true);
foreach ($routes as $route) {
$cacheManager->invalidateRoute($route);
}
return $this->json(['status' => Response::HTTP_OK]);
}
return $this->json(['status' => Response::HTTP_METHOD_NOT_ALLOWED]);
}
}