function BigPipeResponseAttachmentsProcessor::processAttachments

Same name and namespace in other branches
  1. 8.9.x core/modules/big_pipe/src/Render/BigPipeResponseAttachmentsProcessor.php \Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor::processAttachments()
  2. 10 core/modules/big_pipe/src/Render/BigPipeResponseAttachmentsProcessor.php \Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor::processAttachments()
  3. 11.x core/modules/big_pipe/src/Render/BigPipeResponseAttachmentsProcessor.php \Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor::processAttachments()

Overrides HtmlResponseAttachmentsProcessor::processAttachments

File

core/modules/big_pipe/src/Render/BigPipeResponseAttachmentsProcessor.php, line 60

Class

BigPipeResponseAttachmentsProcessor
Processes attachments of HTML responses with BigPipe enabled.

Namespace

Drupal\big_pipe\Render

Code

public function processAttachments(AttachmentsInterface $response) {
    assert($response instanceof HtmlResponse);
    // First, render the actual placeholders; this will cause the BigPipe
    // placeholder strategy to generate BigPipe placeholders. We need those to
    // exist already so that we can extract BigPipe placeholders. This is hence
    // a bit of unfortunate but necessary duplication.
    // @see \Drupal\big_pipe\Render\Placeholder\BigPipeStrategy
    // (Note this is copied verbatim from
    // \Drupal\Core\Render\HtmlResponseAttachmentsProcessor::processAttachments)
    try {
        $response = $this->renderPlaceholders($response);
    } catch (EnforcedResponseException $e) {
        return $e->getResponse();
    }
    // Extract BigPipe placeholders; HtmlResponseAttachmentsProcessor does not
    // know (nor need to know) how to process those.
    $attachments = $response->getAttachments();
    $big_pipe_placeholders = [];
    $big_pipe_nojs_placeholders = [];
    if (isset($attachments['big_pipe_placeholders'])) {
        $big_pipe_placeholders = $attachments['big_pipe_placeholders'];
        unset($attachments['big_pipe_placeholders']);
    }
    if (isset($attachments['big_pipe_nojs_placeholders'])) {
        $big_pipe_nojs_placeholders = $attachments['big_pipe_nojs_placeholders'];
        unset($attachments['big_pipe_nojs_placeholders']);
    }
    $html_response = clone $response;
    $html_response->setAttachments($attachments);
    // Call HtmlResponseAttachmentsProcessor to process all other attachments.
    $processed_html_response = $this->htmlResponseAttachmentsProcessor
        ->processAttachments($html_response);
    // Restore BigPipe placeholders.
    $attachments = $processed_html_response->getAttachments();
    $big_pipe_response = clone $processed_html_response;
    if (count($big_pipe_placeholders)) {
        $attachments['big_pipe_placeholders'] = $big_pipe_placeholders;
    }
    if (count($big_pipe_nojs_placeholders)) {
        $attachments['big_pipe_nojs_placeholders'] = $big_pipe_nojs_placeholders;
    }
    $big_pipe_response->setAttachments($attachments);
    return $big_pipe_response;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.