<?php
declare(strict_types=1);
namespace App\V4\Dev\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Profiler\Profiler;
class DisableProfilerOnProfilerEventSubscriber implements EventSubscriberInterface
{
/**
* @var Profiler|null
*/
private $profiler;
public function __construct(?Profiler $profiler)
{
$this->profiler = $profiler;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 2048],
];
}
public function onKernelRequest(RequestEvent $requestEvent): void
{
if (!$this->profiler instanceof Profiler) {
return;
}
if ($this->shouldDisable($requestEvent->getRequest())) {
$this->profiler->disable();
}
}
private function shouldDisable(Request $request): bool
{
return Request::METHOD_OPTIONS === $request->getMethod()
|| str_starts_with($request->getRequestUri(), '/dev/profiler');
}
}