3 namespace Drupal\Core\EventSubscriber;
5 use Drupal\Core\Form\EnforcedResponse;
6 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
7 use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
8 use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
9 use Symfony\Component\HttpKernel\HttpKernelInterface;
10 use Symfony\Component\HttpKernel\KernelEvents;
13 * Handle the EnforcedResponseException and deliver an EnforcedResponse.
15 class EnforcedFormResponseSubscriber implements EventSubscriberInterface {
18 * Replaces the response in case an EnforcedResponseException was thrown.
20 public function onKernelException(GetResponseForExceptionEvent $event) {
21 if ($response = EnforcedResponse::createFromException($event->getException())) {
22 // Setting the response stops the event propagation.
23 $event->setResponse($response);
28 * Unwraps an enforced response.
30 public function onKernelResponse(FilterResponseEvent $event) {
31 $response = $event->getResponse();
32 if ($response instanceof EnforcedResponse && $event->getRequestType() === HttpKernelInterface::MASTER_REQUEST) {
33 $event->setResponse($response->getResponse());
40 public static function getSubscribedEvents() {
41 $events[KernelEvents::EXCEPTION] = ['onKernelException', 128];
42 $events[KernelEvents::RESPONSE] = ['onKernelResponse', 128];