diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php index d12bf32061..152bd2c42e 100644 --- a/core/lib/Drupal.php +++ b/core/lib/Drupal.php @@ -6,7 +6,7 @@ */ use Drupal\Core\DependencyInjection\ContainerNotInitializedException; -use Drupal\Core\Messenger\ChainedMessenger; +use Drupal\Core\Messenger\LegacyMessenger; use Drupal\Core\Url; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -101,6 +101,13 @@ class Drupal { */ protected static $container; + /** + * A LegacyMessenger instance, if set. + * + * @var \Drupal\Core\Messenger\LegacyMessenger|null + */ + protected static $legacyMessenger; + /** * Sets a new global container. * @@ -765,7 +772,31 @@ public static function time() { * The messenger. */ public static function messenger() { - return new ChainedMessenger(); + // Use the Messenger service, if it exists. Note: because the container has + // the potential to be rebuilt during requests, this service cannot be + // directly stored on this class as a static. + if (\Drupal::hasService('messenger')) { + $messenger = \Drupal::service('messenger'); + + // Transfer LegacyMessenger messages into the service and then remove it. + if (isset(static::$legacyMessenger)) { + foreach (static::$legacyMessenger->deleteAll() as $type => $messages) { + foreach ($messages as $message) { + $messenger->addMessage($message, $type); + } + } + static::$legacyMessenger = NULL; + } + + return $messenger; + } + + // Fallback to LegacyMessenger. + if (!isset(static::$legacyMessenger)) { + static::$legacyMessenger = new LegacyMessenger(); + } + + return static::$legacyMessenger; } } diff --git a/core/lib/Drupal/Core/Messenger/ChainedMessenger.php b/core/lib/Drupal/Core/Messenger/ChainedMessenger.php deleted file mode 100644 index e1a7af71a1..0000000000 --- a/core/lib/Drupal/Core/Messenger/ChainedMessenger.php +++ /dev/null @@ -1,133 +0,0 @@ -getMessenger()->addMessage($message, $type, $repeat); - } - - /** - * {@inheritdoc} - */ - public function addStatus($message, $repeat = FALSE) { - return $this->getMessenger()->addStatus($message, $repeat); - } - - /** - * {@inheritdoc} - */ - public function addError($message, $repeat = FALSE) { - return $this->getMessenger()->addError($message, $repeat); - } - - /** - * {@inheritdoc} - */ - public function addWarning($message, $repeat = FALSE) { - return $this->getMessenger()->addWarning($message, $repeat); - } - - /** - * {@inheritdoc} - */ - public function all() { - return $this->getMessenger()->all(); - } - - /** - * {@inheritdoc} - */ - public function messagesByType($type) { - return $this->getMessenger()->messagesByType($type); - } - - /** - * {@inheritdoc} - */ - public function deleteAll() { - return $this->getMessenger()->deleteAll(); - } - - /** - * {@inheritdoc} - */ - public function deleteByType($type) { - return $this->getMessenger()->deleteByType($type); - } - - /** - * Get the messenger to use. - * - * @return \Drupal\Core\Messenger\MessengerInterface - * The messenger. - */ - public function getMessenger() { - // Use the Messenger service, if it exists. Note: because the container has - // the potential to be rebuilt during requests, this service cannot be - // stored on this class directly since it is statically cached in - // \Drupal::messenger(). - if (\Drupal::hasService('messenger')) { - $messenger = \Drupal::service('messenger'); - - // Merge in any LegacyMessenger messages and then remove it. - // Initially the legacy messanger just for transfer messages reason. - $legacy_messanger = isset($this->legacyMessenger) ? $this->legacyMessenger : (new LegacyMessenger()); - $this->transferMessages($legacy_messanger, $messenger); - - return $messenger; - } - - // Fallback to LegacyMessenger. - if (!isset($this->legacyMessenger)) { - $this->legacyMessenger = new LegacyMessenger(); - } - - return $this->legacyMessenger; - } - - /** - * Transfers messages from one messenger to another. - * - * @param \Drupal\Core\Messenger\MessengerInterface $from - * The messenger to merge from. - * @param \Drupal\Core\Messenger\MessengerInterface $to - * The messenger to merge to. - */ - protected function transferMessages(MessengerInterface $from, MessengerInterface $to) { - foreach ($from->deleteAll() as $type => $messages) { - foreach ($messages as $message) { - $to->addMessage($message, $type); - } - } - } - -} diff --git a/core/tests/Drupal/KernelTests/Core/Messenger/ChainedMessengerTest.php b/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php similarity index 74% rename from core/tests/Drupal/KernelTests/Core/Messenger/ChainedMessengerTest.php rename to core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php index db65ef54d5..a0e2e68dc8 100644 --- a/core/tests/Drupal/KernelTests/Core/Messenger/ChainedMessengerTest.php +++ b/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php @@ -2,7 +2,6 @@ namespace Drupal\KernelTests\Core\Messenger; -use Drupal\Core\Messenger\ChainedMessenger; use Drupal\Core\Messenger\LegacyMessenger; use Drupal\Core\Messenger\Messenger; use Drupal\Core\Messenger\MessengerInterface; @@ -10,19 +9,16 @@ /** * @group Messenger - * @coversDefaultClass \Drupal\Core\Messenger\ChainedMessenger */ -class ChainedMessengerTest extends KernelTestBase { +class MessengerTest extends KernelTestBase { /** * @covers \Drupal::messenger - * @covers ::all - * @covers ::addMessage - * @covers ::addError - * @covers ::addStatus - * @covers ::addWarning - * @covers ::getMessenger - * @covers ::transferMessages + * @covers \Drupal\Core\Messenger\MessengerInterface::all + * @covers \Drupal\Core\Messenger\MessengerInterface::addMessage + * @covers \Drupal\Core\Messenger\MessengerInterface::addError + * @covers \Drupal\Core\Messenger\MessengerInterface::addStatus + * @covers \Drupal\Core\Messenger\MessengerInterface::addWarning */ public function testMessages() { // Save the current container for later use. @@ -31,12 +27,9 @@ public function testMessages() { // Unset the container to mimic not having one. \Drupal::unsetContainer(); - /** @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()); + $messenger = \Drupal::messenger(); + $this->assertInstanceOf(LegacyMessenger::class, $messenger); // Add messages. $messenger->addMessage('Foobar'); @@ -47,11 +40,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()); + $messenger = \Drupal::messenger(); + $this->assertInstanceOf(Messenger::class, $messenger); // Add more messages. $messenger->addMessage('Platypus');