EnforcedFormResponseSubscriber.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. namespace Drupal\Core\EventSubscriber;
  3. use Drupal\Core\Form\EnforcedResponse;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  6. use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. /**
  9. * Handle the EnforcedResponseException and deliver an EnforcedResponse.
  10. */
  11. class EnforcedFormResponseSubscriber implements EventSubscriberInterface {
  12. /**
  13. * Replaces the response in case an EnforcedResponseException was thrown.
  14. */
  15. public function onKernelException(GetResponseForExceptionEvent $event) {
  16. if ($response = EnforcedResponse::createFromException($event->getException())) {
  17. // Setting the response stops the event propagation.
  18. $event->setResponse($response);
  19. }
  20. }
  21. /**
  22. * Unwraps an enforced response.
  23. */
  24. public function onKernelResponse(FilterResponseEvent $event) {
  25. $response = $event->getResponse();
  26. if ($response instanceof EnforcedResponse && $event->isMasterRequest()) {
  27. $event->setResponse($response->getResponse());
  28. }
  29. }
  30. /**
  31. * {@inheritdoc}
  32. */
  33. public static function getSubscribedEvents() {
  34. $events[KernelEvents::EXCEPTION] = ['onKernelException', 128];
  35. $events[KernelEvents::RESPONSE] = ['onKernelResponse', 128];
  36. return $events;
  37. }
  38. }