Version 1
[yaffs-website] / web / core / modules / system / tests / modules / render_placeholder_message_test / src / RenderPlaceholderMessageTestController.php
1 <?php
2
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;
7
8 class RenderPlaceholderMessageTestController implements ContainerAwareInterface {
9
10   use ContainerAwareTrait;
11
12   /**
13    * @return array
14    */
15   public function messagesPlaceholderFirst() {
16     return $this->build([
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>',
20     ]);
21   }
22
23   /**
24    * @return array
25    */
26   public function messagesPlaceholderMiddle() {
27     return $this->build([
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>',
31     ]);
32   }
33
34   /**
35    * @return array
36    */
37   public function messagesPlaceholderLast() {
38     return $this->build([
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>',
42     ]);
43   }
44
45   /**
46    * @return array
47    */
48   public function queuedMessages() {
49     return ['#type' => 'status_messages'];
50   }
51
52   /**
53    * @return array
54    */
55   protected function build(array $placeholder_order) {
56     $build = [];
57     $build['messages'] = ['#type' => 'status_messages'];
58     $build['p1'] = [
59       '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P1']],
60       '#create_placeholder' => TRUE,
61     ];
62     $build['p2'] = [
63       '#lazy_builder' => ['\Drupal\render_placeholder_message_test\RenderPlaceholderMessageTestController::setAndLogMessage', ['P2']],
64       '#create_placeholder' => TRUE,
65     ];
66
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);
71     });
72
73     $reordered = [];
74     foreach ($placeholder_order as $placeholder) {
75       $reordered[$placeholder] = $build['#attached']['placeholders'][$placeholder];
76     }
77     $build['#attached']['placeholders'] = $reordered;
78
79     return $build;
80   }
81
82   /**
83    * #lazy_builder callback; sets and prints a message.
84    *
85    * @param string $message
86    *   The message to send.
87    *
88    * @return array
89    *   A renderable array containing the message.
90    */
91   public static function setAndLogMessage($message) {
92     // Set message.
93     drupal_set_message($message);
94
95     // Print which message is expected.
96     return ['#markup' => '<p class="logged-message">Message: ' . $message . '</p>'];
97   }
98
99 }