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);
}
}