build([ '', '', '', ]); } /** * @return array */ public function messagesPlaceholderMiddle() { return $this->build([ '', '', '', ]); } /** * @return array */ public function messagesPlaceholderLast() { return $this->build([ '', '', '', ]); } /** * @return array */ public function queuedMessages() { return ['#type' => 'status_messages']; } /** * @return array */ protected function build(array $placeholder_order) { $build = []; $build['messages'] = ['#type' => 'status_messages']; $build['p1'] = [ '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P1']], '#create_placeholder' => TRUE, ]; $build['p2'] = [ '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P2']], '#create_placeholder' => TRUE, ]; /** @var \Drupal\Core\Render\RendererInterface $renderer */ $renderer = $this->container->get('renderer'); $renderer->executeInRenderContext(new RenderContext(), function () use (&$build, $renderer) { return $renderer->render($build, FALSE); }); $reordered = []; foreach ($placeholder_order as $placeholder) { $reordered[$placeholder] = $build['#attached']['placeholders'][$placeholder]; } $build['#attached']['placeholders'] = $reordered; return $build; } /** * #lazy_builder callback; sets and prints a message. * * @param string $message * The message to send. * * @return array * A renderable array containing the message. */ public static function setAndLogMessage($message) { // Set message. drupal_set_message($message); // Print which message is expected. return ['#markup' => '

Message: ' . $message . '

']; } }