diff core/lib/Drupal/Core/EventSubscriber/PsrResponseSubscriber.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Core/EventSubscriber/PsrResponseSubscriber.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,57 @@
+<?php
+
+namespace Drupal\Core\EventSubscriber;
+
+use Psr\Http\Message\ResponseInterface;
+
+use Symfony\Bridge\PsrHttpMessage\HttpFoundationFactoryInterface;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
+
+/**
+ * Response subscriber for handling PSR-7 responses.
+ */
+class PsrResponseSubscriber implements EventSubscriberInterface {
+
+  /**
+   * The httpFoundation factory.
+   *
+   * @var \Symfony\Bridge\PsrHttpMessage\HttpFoundationFactoryInterface
+   */
+  protected $httpFoundationFactory;
+
+  /**
+   * Constructs a new PathRootsSubscriber instance.
+   *
+   * @param \Symfony\Bridge\PsrHttpMessage\HttpFoundationFactoryInterface $http_foundation_factory
+   *   The httpFoundation factory.
+   */
+  public function __construct(HttpFoundationFactoryInterface $http_foundation_factory) {
+    $this->httpFoundationFactory = $http_foundation_factory;
+  }
+
+  /**
+   * Converts a PSR-7 response to a Symfony response.
+   *
+   * @param \Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent $event
+   *   The Event to process.
+   */
+  public function onKernelView(GetResponseForControllerResultEvent $event) {
+    $controller_result = $event->getControllerResult();
+
+    if ($controller_result instanceof ResponseInterface) {
+      $event->setResponse($this->httpFoundationFactory->createResponse($controller_result));
+    }
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    $events[KernelEvents::VIEW][] = ['onKernelView'];
+    return $events;
+  }
+
+}