Events und Lebenszyklus¶
Events erlauben einem Dienst, einen bestehenden Prozess zu beobachten oder zu ergänzen. Wähle das Event nach Auslösestelle und Zeitpunkt, nicht allein nach Klassenname.
Nützliche Eventfamilien¶
| Event | Zweck |
|---|---|
Store\Event\ContextCreatedEvent |
Mit neu erzeugtem Shopkontext arbeiten |
Product\Event\ProductCreatedEvent |
Ein konstruiertes Produktobjekt und dessen Daten/Kontext beobachten |
Product\Event\ProductConfigurationEvent |
Mit Produktkonfiguration für das Rendering arbeiten |
Product\Event\ProductPriceEvent |
Einen berechneten Produktpreis prüfen oder ändern |
Checkout\Event\CheckoutStepEvent |
Einen Kassenschritt ergänzen oder validieren |
Store\Event\OrderValidationEvent |
Bedingungen zur Bestellvalidierung ergänzen |
Store\Event\CollectOrderNotificationTokensEvent |
Bestellbenachrichtigungstokens ergänzen |
Diese Namen sind relativ zu Isotope\CoreBundle. ProductCreatedEvent beschreibt die Konstruktion eines Produktobjekts. Nimm nicht an, dass ein Händler gerade einen neuen Katalogdatensatz angelegt hat.
Beispiel: einen Benachrichtigungstoken ergänzen¶
In einer Anwendung mit aktivierter Service-Autokonfiguration kann ein gezielter Listener einen statischen Unterstützungshinweis ergänzen:
<?php
declare(strict_types=1);
namespace App\EventListener;
use Isotope\CoreBundle\Store\Event\CollectOrderNotificationTokensEvent;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
#[AsEventListener]
final class OrderSupportTokenListener
{
public function __invoke(CollectOrderNotificationTokensEvent $event): void
{
$event->addToken('support_message', 'Antworte auf diese E-Mail, wenn du Hilfe benötigst.');
}
}
Das Event wird bewusst über seine verändernde Methode addToken() ergänzt. Validiert Notification Center Tokennamen für das Nachrichtenfeld, erweitere auch die erlaubte Tokendefinition des Benachrichtigungstyps, bevor du dort ##support_message## verwendest. Prüfe Registrierung, Validierung erlaubter Tokens und eine zugestellte Nachricht in einer vollständigen Contao-Anwendung.
Nimm keine Zugangsdaten oder unnötigen Kundendaten in Tokens auf. Übersetze mehrsprachige Nachrichten im passenden Bestellkontext, statt den Beispieltext fest einzubauen.
Kassenvalidierung¶
CheckoutStepEvent stellt Schritttyp, Request, Kontext, Bearbeitungs-/Absendestatus und ein Fehlerflag bereit. Es unterstützt außerdem Markup vor und nach dem Schritt. Prüfe, ob dein Listener für Adresse, Versand, Zahlung oder _summary läuft.
OrderValidationEvent akzeptiert Symfony-Validierungsbedingungen. Verwende es zur Validierung von Bestelldaten, statt für eine einzige Prüfung einen ganzen Kassencontroller zu ersetzen.
Transaktionslebenszyklus-Events¶
Isotopes Transaktionsdispatcher verwendet benannte Phasen:
<name>.prevor der Operation.<name>.error, wenn die umschlossene Operation eine Ausnahme auslöst.<name>.post, nachdem der Dispatcher die Operation bzw. den behandelten Fehlerpfad beendet hat.
Beispielsweise ist OrderTransactionEvent::NAME gleich isotope.order, während OrderStatusTransactionEvent::NAME gleich isotope.order_status ist.
Diese Phasen werden unter ausdrücklichen Stringnamen ausgelöst. Abonniere den tatsächlichen Phasennamen und nicht nur die Eventklasse. Der Dispatcher kann einen Fehlerlistener ein Ergebnis liefern lassen. Deshalb belegt ein Post-Event allein weder Zahlungserfolg noch eine allgemeine Garantie, dass die Datenbanktransaktion bereits bestätigt wurde.
Externe Nebenwirkungen¶
Definiere für Buchhaltungs-, Abwicklungs- und Anbieterintegrationen Wiederholungs- und Duplikatbehandlung anhand stabiler Bestell-/Transaktionsreferenzen. Validiere Zahlungsnachweise an der Anbieterschnittstelle. Vermeide irreversible externe Aktionen aus einer Phase, die vor erfolgreicher Speicherung laufen kann.
Quellen: Transaktionsdispatcher, Benachrichtigungstoken-Event.