diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php index d12bf32061..825d2730d0 100644 --- a/core/lib/Drupal.php +++ b/core/lib/Drupal.php @@ -101,6 +101,13 @@ class Drupal { */ protected static $container; + /** + * The messenger. + * + * @var \Drupal\Core\Messenger\MessengerInterface + */ + protected static $messenger; + /** * Sets a new global container. * @@ -765,7 +772,10 @@ public static function time() { * The messenger. */ public static function messenger() { - return new ChainedMessenger(); + if (static::$messenger === NULL) { + static::$messenger = new ChainedMessenger(); + } + return static::$messenger; } } diff --git a/core/tests/Drupal/KernelTests/Core/Messenger/ChainedMessengerTest.php b/core/tests/Drupal/KernelTests/Core/Messenger/ChainedMessengerTest.php index 1fd0678f52..db65ef54d5 100644 --- a/core/tests/Drupal/KernelTests/Core/Messenger/ChainedMessengerTest.php +++ b/core/tests/Drupal/KernelTests/Core/Messenger/ChainedMessengerTest.php @@ -15,13 +15,14 @@ class ChainedMessengerTest extends KernelTestBase { /** + * @covers \Drupal::messenger * @covers ::all * @covers ::addMessage * @covers ::addError * @covers ::addStatus * @covers ::addWarning * @covers ::getMessenger - * @covers ::mergeMessages + * @covers ::transferMessages */ public function testMessages() { // Save the current container for later use. @@ -30,8 +31,9 @@ public function testMessages() { // Unset the container to mimic not having one. \Drupal::unsetContainer(); - // Create a new ChainedMessenger instance. - $messenger = new ChainedMessenger(); + /** @var \Drupal\Core\Messenger\ChainedMessenger $messenger */ + // Retrieve the messenger (LegacyMessenger). + $messenger = \Drupal::messenger(); // Verify that the messenger returned is an instance of LegacyMessenger. $this->assertInstanceOf(LegacyMessenger::class, $messenger->getMessenger()); @@ -45,6 +47,9 @@ public function testMessages() { // Restore the container. \Drupal::setContainer($container); + // Retrieve the messenger (Messenger service). + $messenger = \Drupal::messenger(); + // Verify that the messenger returned is the Messenger service. $this->assertInstanceOf(Messenger::class, $messenger->getMessenger());