Shopware: Wie Enlight_Event_EventArgs funktionieren
Unser Ziel ist es den Text einer Email zu ändern die aus einer Form generiert wird. Wir nutzen dieses Event:
$mail = Shopware()->Events()->filter('Shopware_Controllers_Frontend_Forms_commitForm_Mail', $mail, ['subject' => $this]);
Wenn wir nun die Args durch gehen...
public function eventMailListener(\Enlight_Event_EventArgs $args){
foreach($args as $key => $value){
echo $key;
}
die();
}
... das nur "subject" also der Controller darin zu finden ist.
Jetzt gucken wir und mal die filter-Methode vom EventManager an.
public function filter($event, $value, $eventArgs = null)
{
if (!$this->hasListeners($event)) {
return $value;
}
$eventArgs = $this->buildEventArgs($eventArgs);
$eventArgs->setReturn($value);
$eventArgs->setName($event);
$eventArgs->setProcessed(false);
foreach ($this->getListeners($event) as $listener) {
if (null !== ($return = $listener->execute($eventArgs))) {
$eventArgs->setReturn($return);
}
}
$eventArgs->setProcessed(true);
return $eventArgs->getReturn();
}
und da sehen wir
$eventArgs->setReturn($value);
Also ist die Lösung
public function eventMailListener(\Enlight_Event_EventArgs $args){
/** @var \Enlight_Components_Mail $mail */
$mail = $args->getReturn();
echo $mail->getPlainBodyText();
die();
}
Wenn man das erst einmal verstanden hat, ist alles plötzlich ganz einfach. Ach ja, wenn man das Subject überschreiben möchte erst einmal $mail->clearSubject(); ausführen.