3 namespace Drupal\render_placeholder_message_test;
4 use Drupal\Core\Render\RenderContext;
5 use Symfony\Component\DependencyInjection\ContainerAwareInterface;
6 use Symfony\Component\DependencyInjection\ContainerAwareTrait;
8 class RenderPlaceholderMessageTestController implements ContainerAwareInterface {
10 use ContainerAwareTrait;
15 public function messagesPlaceholderFirst() {
17 '<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"></drupal-render-placeholder>',
18 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="JBp04zOwNhYqMBgRkyBnPdma8m4l2elDnXMJ9tEsP6k"></drupal-render-placeholder>',
19 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="JnoubSJT1l92Dm4fJw4EPsSzRsmE88H6Q1zu9-OzDh4"></drupal-render-placeholder>',
26 public function messagesPlaceholderMiddle() {
28 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="JBp04zOwNhYqMBgRkyBnPdma8m4l2elDnXMJ9tEsP6k"></drupal-render-placeholder>',
29 '<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"></drupal-render-placeholder>',
30 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="JnoubSJT1l92Dm4fJw4EPsSzRsmE88H6Q1zu9-OzDh4"></drupal-render-placeholder>',
37 public function messagesPlaceholderLast() {
39 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P1" token="JBp04zOwNhYqMBgRkyBnPdma8m4l2elDnXMJ9tEsP6k"></drupal-render-placeholder>',
40 '<drupal-render-placeholder callback="\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage" arguments="0=P2" token="JnoubSJT1l92Dm4fJw4EPsSzRsmE88H6Q1zu9-OzDh4"></drupal-render-placeholder>',
41 '<drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="_HAdUpwWmet0TOTe2PSiJuMntExoshbm1kh2wQzzzAA"></drupal-render-placeholder>',
48 public function queuedMessages() {
49 return ['#type' => 'status_messages'];
55 protected function build(array $placeholder_order) {
57 $build['messages'] = ['#type' => 'status_messages'];
59 '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P1']],
60 '#create_placeholder' => TRUE,
63 '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P2']],
64 '#create_placeholder' => TRUE,
67 /** @var \Drupal\Core\Render\RendererInterface $renderer */
68 $renderer = $this->container->get('renderer');
69 $renderer->executeInRenderContext(new RenderContext(), function () use (&$build, $renderer) {
70 return $renderer->render($build, FALSE);
74 foreach ($placeholder_order as $placeholder) {
75 $reordered[$placeholder] = $build['#attached']['placeholders'][$placeholder];
77 $build['#attached']['placeholders'] = $reordered;
83 * #lazy_builder callback; sets and prints a message.
85 * @param string $message
86 * The message to send.
89 * A renderable array containing the message.
91 public static function setAndLogMessage($message) {
93 drupal_set_message($message);
95 // Print which message is expected.
96 return ['#markup' => '<p class="logged-message">Message: ' . $message . '</p>'];