Shopware: Wie Enlight_Event_EventArgs funktionieren

bbcode-image


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.
User annonyme 2017-05-29 20:55

write comment:
Eight + = 14

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?