BigPipeTestSubscriber.php in Drupal 8
File
core/modules/big_pipe/tests/modules/big_pipe_test/src/EventSubscriber/BigPipeTestSubscriber.php
View source
<?php
namespace Drupal\big_pipe_test\EventSubscriber;
use Drupal\Core\Render\AttachmentsInterface;
use Drupal\Core\Render\HtmlResponse;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class BigPipeTestSubscriber implements EventSubscriberInterface {
const CONTENT_TRIGGER_EXCEPTION = 'NOPE!NOPE!NOPE!';
public function onRespondTriggerException(FilterResponseEvent $event) {
$response = $event
->getResponse();
if (!$response instanceof AttachmentsInterface) {
return;
}
$attachments = $response
->getAttachments();
if (!isset($attachments['big_pipe_placeholders']) && !isset($attachments['big_pipe_nojs_placeholders'])) {
if (strpos($response
->getContent(), static::CONTENT_TRIGGER_EXCEPTION) !== FALSE) {
throw new \Exception('Oh noes!');
}
}
}
public function onRespondSetBigPipeDebugPlaceholderHeaders(FilterResponseEvent $event) {
$response = $event
->getResponse();
if (!$response instanceof HtmlResponse) {
return;
}
$attachments = $response
->getAttachments();
$response->headers
->set('BigPipe-Test-Placeholders', '<none>');
$response->headers
->set('BigPipe-Test-No-Js-Placeholders', '<none>');
if (!empty($attachments['big_pipe_placeholders'])) {
$response->headers
->set('BigPipe-Test-Placeholders', implode(' ', array_keys($attachments['big_pipe_placeholders'])));
}
if (!empty($attachments['big_pipe_nojs_placeholders'])) {
$response->headers
->set('BigPipe-Test-No-Js-Placeholders', implode(' ', array_map('rawurlencode', array_keys($attachments['big_pipe_nojs_placeholders']))));
}
}
public static function getSubscribedEvents() {
$events[KernelEvents::RESPONSE][] = [
'onRespondSetBigPipeDebugPlaceholderHeaders',
-9999,
];
$events[KernelEvents::RESPONSE][] = [
'onRespondTriggerException',
-10001,
];
return $events;
}
}