Events & Subscriber

In den Core einklinken

Shopware wirft an unzähligen Stellen Events. Über einen Event-Subscriber klinkt man eigene Logik ein, ohne den Core zu verändern – der saubere Weg, um Verhalten zu erweitern.

Ein Subscriber

Ein Subscriber implementiert das EventSubscriberInterface und meldet in getSubscribedEvents(), worauf er hört.

<?php declare(strict_types=1);

namespace Swag\Example\Subscriber;

use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ProductSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            ProductPageLoadedEvent::class => 'onProductPageLoaded',
        ];
    }

    public function onProductPageLoaded(ProductPageLoadedEvent $event): void
    {
        // z. B. Zusatzdaten an die Seite hängen
        $page = $event->getPage();
    }
}

Registrieren

Als Service mit dem Tag kernel.event_subscriber – dann findet Shopware den Subscriber automatisch:

<service id="Swag\Example\Subscriber\ProductSubscriber">
    <tag name="kernel.event_subscriber"/>
</service>

Häufig genutzte Events

EventZeitpunkt
ProductPageLoadedEventProduktseite wird geladen
CheckoutOrderPlacedEventeine Bestellung wurde ausgelöst
StorefrontRenderEventvor dem Rendern einer Storefront-Seite
EntityWrittenEventein Datensatz wurde geschrieben

Tipp: Über StorefrontRenderEvent lassen sich globale Daten an alle Templates weiterreichen – praktisch, aber sparsam einsetzen, damit es performant bleibt.

Damit sich ein Plugin auch konfigurieren lässt, braucht es Einstellungen – das ist der nächste Schritt.