public BigPipe::sendContent($content, array $attachments)
Sends an HTML response in chunks using the BigPipe technique.
Parameters
string $content: The HTML response content to send.
array $attachments: The HTML response's attachments.
Overrides BigPipeInterface::sendContent
File
- core/modules/big_pipe/src/Render/BigPipe.php, line 112
 
Class
- BigPipe
 - The default BigPipe service.
 
Namespace
Drupal\big_pipe\Render
Code
public function sendContent($content, array $attachments) {
  // First, gather the BigPipe placeholders that must be replaced.
  $placeholders = isset($attachments['big_pipe_placeholders']) ? $attachments['big_pipe_placeholders'] : [];
  $nojs_placeholders = isset($attachments['big_pipe_nojs_placeholders']) ? $attachments['big_pipe_nojs_placeholders'] : [];
  // BigPipe sends responses using "Transfer-Encoding: chunked". To avoid
  // sending already-sent assets, it is necessary to track cumulative assets
  // from all previously rendered/sent chunks.
  // @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.41
  $cumulative_assets = AttachedAssets::createFromRenderArray(['#attached' => $attachments]);
  $cumulative_assets->setAlreadyLoadedLibraries($attachments['library']);
  // The content in the placeholders may depend on the session, and by the
  // time the response is sent (see index.php), the session is already closed.
  // Reopen it for the duration that we are rendering placeholders.
  $this->session->start();
  // Find the closing </body> tag and get the strings before and after. But be
  // careful to use the latest occurrence of the string "</body>", to ensure
  // that strings in inline JavaScript or CDATA sections aren't used instead.
  $parts = explode('</body>', $content);
  $post_body = array_pop($parts);
  $pre_body = implode('', $parts);
  $this->sendPreBody($pre_body, $nojs_placeholders, $cumulative_assets);
  $this->sendPlaceholders($placeholders, $this->getPlaceholderOrder($pre_body, $placeholders), $cumulative_assets);
  $this->sendPostBody($post_body);
  // Close the session again.
  $this->session->save();
  return $this;
}
Please login to continue.