Hallo zusammen,
ich habe einen Subscriber, über den ich mich auf 2 Events registriere.
Durch onCheckoutPostDispatch lese ich Daten aus einem Formular (Post-Request) aus, welches bei der Bestätigung der Bestellung übergeben wird. Aktuell speichere ich die relevanten Daten in der Klassenvariable $this->mail.
In onBeforeSendOrderConfirmationMail (welche im Bestellprozess kurz später aufgerufen wird) möchte ich diese Daten nun weiterverarbeiten. Leider ist an dieser Stelle $this->mail nie ein Wert zugewiesen. Ich vermute, dass hier bereits auf einer neuen Objektinstanz gearbeitet wird.
class Frontend implements SubscriberInterface
{
private $mail;
public static function getSubscribedEvents()
{
return array(
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout' => 'onCheckoutPostDispatch',
'Shopware_Modules_Order_SendMail_Filter' => 'onBeforeSendOrderConfirmationMail'
);
}
public function onCheckoutPostDispatch(\Enlight_Event_EventArgs $args)
{
/** @var \Shopware_Controllers_Frontend_Checkout $subject */
$subject = $args->getSubject();
$request = $subject->Request();
if ($request->getActionName() !== 'finish') {
return;
}
$postData = $request->getPost();
$this->mail = $postData['additionalMail'];
}
public function onBeforeSendOrderConfirmationMail(\Enlight_Event_EventArgs $args)
{
$mail = $args->getReturn();
// hier ist $this->mail nie ein Wert zugewiesen!
if (isset($this->mail)) {
$mail->addTo($this->mail);
}
return $mail;
}
}
Meine Fragen:
-
Was ist der sauberste Weg, eine Variable über mehrerer Events hinweg verfügbar zu machen?
-
Wie kann ich als Entwickler am besten herausfinden, wann Instanzen bestimmter Klassen erzeugt werden und wie lange diese „leben“?