EnforcedFormResponseSubscriber.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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\HttpKernelInterface;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. /**
  10. * Handle the EnforcedResponseException and deliver an EnforcedResponse.
  11. */
  12. class EnforcedFormResponseSubscriber implements EventSubscriberInterface {
  13. /**
  14. * Replaces the response in case an EnforcedResponseException was thrown.
  15. */
  16. public function onKernelException(GetResponseForExceptionEvent $event) {
  17. if ($response = EnforcedResponse::createFromException($event->getException())) {
  18. // Setting the response stops the event propagation.
  19. $event->setResponse($response);
  20. }
  21. }
  22. /**
  23. * Unwraps an enforced response.
  24. */
  25. public function onKernelResponse(FilterResponseEvent $event) {
  26. $response = $event->getResponse();
  27. if ($response instanceof EnforcedResponse && $event->getRequestType() === HttpKernelInterface::MASTER_REQUEST) {
  28. $event->setResponse($response->getResponse());
  29. }
  30. }
  31. /**
  32. * {@inheritdoc}
  33. */
  34. public static function getSubscribedEvents() {
  35. $events[KernelEvents::EXCEPTION] = ['onKernelException', 128];
  36. $events[KernelEvents::RESPONSE] = ['onKernelResponse', 128];
  37. return $events;
  38. }
  39. }