diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc index 3bd6e9f991..35035ffa0a 100644 --- a/core/includes/bootstrap.inc +++ b/core/includes/bootstrap.inc @@ -473,7 +473,7 @@ function watchdog_exception($type, Exception $exception, $message = NULL, $varia */ function drupal_set_message($message = NULL, $type = 'status', $repeat = FALSE) { @trigger_error('drupal_set_message() is deprecated Drupal 8.5.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Messenger\MessengerInterface::addMessage() instead. See https://www.drupal.org/node/2774931', E_USER_DEPRECATED); - $messenger = \Drupal::service('messenger'); + $messenger = \Drupal::messenger(); $messenger->addMessage($message, $type, $repeat); return $messenger->all(); } diff --git a/core/lib/Drupal/Core/Messenger/ChainedMessenger.php b/core/lib/Drupal/Core/Messenger/ChainedMessenger.php index b056a2ba7d..bf77ad62eb 100644 --- a/core/lib/Drupal/Core/Messenger/ChainedMessenger.php +++ b/core/lib/Drupal/Core/Messenger/ChainedMessenger.php @@ -22,20 +22,6 @@ class ChainedMessenger implements MessengerInterface { */ protected $memoryMessenger; - /** - * The container service messenger. - * - * @var \Drupal\Core\Messenger\MessengerInterface - */ - protected $messengerService; - - /** - * ChainedMessenger constructor. - */ - public function __construct() { - $this->memoryMessenger = new MemoryMessenger(); - } - /** * {@inheritdoc} */ @@ -99,19 +85,24 @@ public function deleteByType($type) { * The messenger. */ protected function getMessenger() { - // Shortcut if we have a messenger service. - if (isset($this->messengerService)) { - return $this->messengerService; - } - - // If the service exists, but we haven't set it yet. + // 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')) { - $this->messengerService = \Drupal::service('messenger'); - $this->mergeMessages($this->memoryMessenger, $this->messengerService); - return $this->messengerService; + $messenger = \Drupal::service('messenger'); + + // Merge in any MemoryMessenger messages and then remove it. + if (isset($this->memoryMessenger)) { + $this->mergeMessages($this->memoryMessenger, $messenger); + unset($this->memoryMessenger); + } + + return $messenger; } - // Fallback to memory messenger. + // Fallback to MemoryMessenger. + $this->memoryMessenger = new MemoryMessenger(); return $this->memoryMessenger; }