diff --git a/libraries/src/Document/Renderer/Html/ModulesRenderer.php b/libraries/src/Document/Renderer/Html/ModulesRenderer.php index 465819e649474..acb00b6e20735 100644 --- a/libraries/src/Document/Renderer/Html/ModulesRenderer.php +++ b/libraries/src/Document/Renderer/Html/ModulesRenderer.php @@ -61,7 +61,7 @@ public function render($position, $params = [], $content = null) // Dispatch onAfterRenderModules event $event = new Module\AfterRenderModulesEvent('onAfterRenderModules', [ - 'subject' => $buffer, + 'subject' => &$buffer, // TODO: Remove reference in Joomla 6, see AfterRenderModulesEvent::__constructor() 'attributes' => new ArrayProxy($params), ]); $app->getDispatcher()->dispatch('onAfterRenderModules', $event); diff --git a/libraries/src/Event/Module/AfterRenderModulesEvent.php b/libraries/src/Event/Module/AfterRenderModulesEvent.php index 92aa5affd22e3..f7b1c2388d633 100644 --- a/libraries/src/Event/Module/AfterRenderModulesEvent.php +++ b/libraries/src/Event/Module/AfterRenderModulesEvent.php @@ -49,6 +49,15 @@ public function __construct($name, array $arguments = []) if (!\array_key_exists('attributes', $this->arguments)) { throw new \BadMethodCallException("Argument 'attributes' of event {$name} is required but has not been provided"); } + + // For backward compatibility make sure the content is referenced + // TODO: Remove in Joomla 6 + // @deprecated: Passing argument by reference is deprecated, and will not work in Joomla 6 + if (key($arguments) === 0) { + $this->arguments['subject'] = &$arguments[0]; + } elseif (\array_key_exists('subject', $arguments)) { + $this->arguments['subject'] = &$arguments['subject']; + } } /** @@ -96,11 +105,11 @@ public function getContent(): string * * @param string $value The value to set * - * @return self + * @return static * * @since 5.0.0 */ - public function setContent(string $value): self + public function updateContent(string $value): static { $this->arguments['subject'] = $value; diff --git a/libraries/src/Event/Module/ModuleEvent.php b/libraries/src/Event/Module/ModuleEvent.php index 0b8365468b986..4c027e1d60d91 100644 --- a/libraries/src/Event/Module/ModuleEvent.php +++ b/libraries/src/Event/Module/ModuleEvent.php @@ -52,10 +52,10 @@ public function __construct($name, array $arguments = []) $arguments = $this->reshapeArguments($arguments, $this->legacyArgumentsOrder); } - if (!\array_key_exists('subject', $arguments)) { + parent::__construct($name, $arguments); + + if (!\array_key_exists('subject', $this->arguments)) { throw new \BadMethodCallException("Argument 'subject' of event {$name} is required but has not been provided"); } - - parent::__construct($name, $arguments); } }