<?php
/*
* Author: Dominik Piekarski <code@dompie.de>
* Created at: 2023/01/27 20:35
*/
declare(strict_types=1);
namespace App\Subscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\RouterInterface;
class KernelExceptionSubscriber implements EventSubscriberInterface
{
private RouterInterface $router;
public function __construct(RouterInterface $router)
{
$this->router = $router;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::EXCEPTION => [
['onNotFoundRedirectToOnlineAmateurs', -63],
],
];
}
public function onNotFoundRedirectToOnlineAmateurs(ExceptionEvent $event): void
{
if ($event->getThrowable() instanceof NotFoundHttpException) {
$request = $event->getRequest();
if (!$request->isMethod('GET') || str_starts_with($request->getPathInfo(), '/booking/external')) {
return;
}
$wmid = $request->query->getInt('wmid');
$wmid = $wmid <= 0 ? [] : ['wmid' => $wmid];
$event->setResponse(
new RedirectResponse($this->router->generate('app_user_amateur_online', $wmid))
);
$event->stopPropagation();
}
}
}