3 namespace Drupal\render_placeholder_message_test;
5 use Drupal\Core\Render\RenderContext;
6 use Symfony\Component\DependencyInjection\ContainerAwareInterface;
7 use Symfony\Component\DependencyInjection\ContainerAwareTrait;
9 class RenderPlaceholderMessageTestController implements ContainerAwareInterface {
11 use ContainerAwareTrait;
16 public function messagesPlaceholderFirst() {
18 '<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"></drupal-render-placeholder>',
19 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="JBp04zOwNhYqMBgRkyBnPdma8m4l2elDnXMJ9tEsP6k"></drupal-render-placeholder>',
20 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="JnoubSJT1l92Dm4fJw4EPsSzRsmE88H6Q1zu9-OzDh4"></drupal-render-placeholder>',
27 public function messagesPlaceholderMiddle() {
29 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="JBp04zOwNhYqMBgRkyBnPdma8m4l2elDnXMJ9tEsP6k"></drupal-render-placeholder>',
30 '<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"></drupal-render-placeholder>',
31 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="JnoubSJT1l92Dm4fJw4EPsSzRsmE88H6Q1zu9-OzDh4"></drupal-render-placeholder>',
38 public function messagesPlaceholderLast() {
40 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="JBp04zOwNhYqMBgRkyBnPdma8m4l2elDnXMJ9tEsP6k"></drupal-render-placeholder>',
41 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="JnoubSJT1l92Dm4fJw4EPsSzRsmE88H6Q1zu9-OzDh4"></drupal-render-placeholder>',
42 '<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"></drupal-render-placeholder>',
49 public function queuedMessages() {
50 return ['#type' => 'status_messages'];
56 protected function build(array $placeholder_order) {
58 $build['messages'] = ['#type' => 'status_messages'];
60 '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P1']],
61 '#create_placeholder' => TRUE,
64 '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P2']],
65 '#create_placeholder' => TRUE,
68 /** @var \Drupal\Core\Render\RendererInterface $renderer */
69 $renderer = $this->container->get('renderer');
70 $renderer->executeInRenderContext(new RenderContext(), function () use (&$build, $renderer) {
71 return $renderer->render($build, FALSE);
75 foreach ($placeholder_order as $placeholder) {
76 $reordered[$placeholder] = $build['#attached']['placeholders'][$placeholder];
78 $build['#attached']['placeholders'] = $reordered;
84 * #lazy_builder callback; sets and prints a message.
86 * @param string $message
87 * The message to send.
90 * A renderable array containing the message.
92 public static function setAndLogMessage($message) {
94 drupal_set_message($message);
96 // Print which message is expected.
97 return ['#markup' => '<p class="logged-message">Message: ' . $message . '</p>'];