Same filename and directory in other branches
- 8.9.x core/modules/big_pipe/src/EventSubscriber/HtmlResponseBigPipeSubscriber.php
- 9 core/modules/big_pipe/src/EventSubscriber/HtmlResponseBigPipeSubscriber.php
Namespace
Drupal\big_pipe\EventSubscriber
File
core/modules/big_pipe/src/EventSubscriber/HtmlResponseBigPipeSubscriber.php
View source
<?php
namespace Drupal\big_pipe\EventSubscriber;
use Drupal\Core\Render\HtmlResponse;
use Drupal\big_pipe\Render\BigPipe;
use Drupal\big_pipe\Render\BigPipeResponse;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class HtmlResponseBigPipeSubscriber implements EventSubscriberInterface {
protected $bigPipe;
public function __construct(BigPipe $big_pipe) {
$this->bigPipe = $big_pipe;
}
public function onRespondEarly(ResponseEvent $event) {
$response = $event
->getResponse();
if (!$response instanceof HtmlResponse) {
return;
}
$attachments = $response
->getAttachments();
if (isset($attachments['html_response_attachment_placeholders']['scripts_bottom'])) {
$scripts_bottom_placeholder = $attachments['html_response_attachment_placeholders']['scripts_bottom'];
$content = $response
->getContent();
$content = str_replace($scripts_bottom_placeholder, '<drupal-big-pipe-scripts-bottom-marker>' . $scripts_bottom_placeholder . '<drupal-big-pipe-scripts-bottom-marker>', $content);
$response
->setContent($content);
}
}
public function onRespond(ResponseEvent $event) {
$response = $event
->getResponse();
if (!$response instanceof HtmlResponse) {
return;
}
$attachments = $response
->getAttachments();
if (empty($attachments['big_pipe_nojs_placeholders'])) {
$content = $response
->getContent();
$content = str_replace('<drupal-big-pipe-scripts-bottom-marker>', '', $content);
$response
->setContent($content);
}
if (empty($attachments['big_pipe_placeholders']) && empty($attachments['big_pipe_nojs_placeholders'])) {
return;
}
$big_pipe_response = new BigPipeResponse($response);
$big_pipe_response
->setBigPipeService($this
->getBigPipeService($event));
$event
->setResponse($big_pipe_response);
}
protected function getBigPipeService(ResponseEvent $event) {
return $this->bigPipe;
}
public static function getSubscribedEvents() : array {
$events[KernelEvents::RESPONSE][] = [
'onRespondEarly',
3,
];
$events[KernelEvents::RESPONSE][] = [
'onRespond',
-10000,
];
return $events;
}
}
Classes