Eine schnelle Referenz, was im Plugin steckt — nützlich für Theme-Entwickler, Plugin-Autoren und alle, die unerwartetes Verhalten diagnostizieren.
├── Api/ REST-Controller (Admin-Endpoints)
├── Command/ Symfony-Konsolenbefehle
├── Decorator/ Decorators um Core-Services von Shopware
├── Entity/ DAL-Definitionen für eigene Tabellen
├── Enum/ Modus- / Strategie-Konstanten
├── Factory/ Cache-Adapter-Factory
├── Framework/ Cache-Store-Implementierung
├── Message/ Async-Messages, die das Plugin dispatcht
├── MessageHandler/ Handler für diese Messages
├── Migration/ Datenbankmigrationen
├── P2LabCache.php Plugin-Einstiegspunkt (Lifecycle)
├── ScheduledTask/ Drei nächtliche Aufräumtasks (+ Handler)
├── Service/ Domain-Services (Großteil der Logik)
├── Subscriber/ Event-Subscriber, die in Shopware einklinken
Service Was er tut CacheEntryServiceLiest / schreibt die Metadaten-Tabelle p2lab_cache_entry CacheInvalidationServiceTop-Level-Invalidierungs-API — clearAll(), clearAllProducts() usw. CacheWarmupServiceFindet cachefähige URLs, erzeugt Fortschrittseinträge, batcht sie CacheSizeServiceMeldet Cache-Gesamtgröße (Festplatte für Filesystem; Datenbank für Redis / APCu) SmartInvalidationAnalyzerFeld-zu-Tag-Mapping für den Smart-Invalidierungsmodus CacheInvalidationLogServicePersistiert Zeilen in p2lab_cache_invalidation_log ReverseProxyLogServicePersistiert Zeilen in p2lab_cache_reverse_proxy_log, plus Analyse-Queries CacheTagServiceBaut das Tag-Set für eine gegebene Antwort TagParserServiceParst Tag-Namen zurück in Entitätsreferenzen für die Log-Ansichten RequestServiceInspiziert Anfragen, um Cachefähigkeit und Cache-Key zu bestimmen SettingsServiceLiest system_config-Werte mit Pro-Sales-Channel-Fallback
Decoriert Zweck SalesChannelContextFactoryGecachter Sales-Channel-Context für Warmup-Worker ReverseProxyGatewayFügt xkey-Strategie + Blocklist + Splitting / Verkürzung vor dem Senden von Purges an Varnish hinzu
Subscriber Hört auf Was er tut CacheEntryFlushSubscriberKernelEvents::TERMINATEPersistiert Metadaten neu geschriebener Einträge nach dem Senden der Antwort CacheInvalidationSubscriberEntity-written-Events Triggert die Invalidierungspipeline (Manual / Basic / Extended / Precise / Smart) CacheResponseSubscriberKernelEvents::RESPONSESpeichert die Antwort im Backend, wenn cachefähig; setzt Cache-Control-Header NotificationMessageSubscriberEigene Plugin-Events Pusht Admin-Benachrichtigungen (Warmup-Abschluss usw.) TagCollectionSubscriberEntity-loaded-Events Sammelt das Tag-Set, das eine Antwort tragen soll XkeySubscriberPre-Purge-Event Wendet Blocklist, Splitting und Verkürzung auf ausgehende xkey-Header an
Message Handler Zweck CacheWarmupStartMessageCacheWarmupStartHandlerStartet einen Warmup-Lauf; spawn’t Batch-Messages CacheWarmupBatchMessageCacheWarmupBatchHandlerVerarbeitet einen Batch URLs
Task Standard-Intervall Was er tut p2lab_cache.cleanup_cache_entries24 h Entfernt verwaiste p2lab_cache_entry-Zeilen p2lab_cache.cleanup_invalidation_log24 h Entfernt Invalidierungslog-Zeilen älter als 30 Tage p2lab_cache.cleanup_reverse_proxy_log24 h Entfernt Reverse-Proxy-Log-Zeilen älter als 30 Tage
Siehe Geplante Tasks .
Tabelle Zweck p2lab_cache_entryMetadaten für jeden Cache-Eintrag (Größe, Typ, Generierungs- / Hit-Zeit) p2lab_cache_invalidation_logJedes Invalidierungsereignis p2lab_cache_reverse_proxy_logJeder an Varnish gesendete xkey-Purge p2lab_cache_warmup_progressEine Zeile pro Warmup-Lauf; trackt Offset und Zähler p2lab_cache_warmup_failed_urlURLs, die während eines Warmups fehlgeschlagen sind
Vom Plugin erzeugte Cache-Tags beginnen alle mit p2c-. Die Konventionen:
p2c-product-<id> — volles Produkt-Tag (jede Feldänderung purged)
p2c-product-<id>.<field> — feldbezogenes Tag im Smart-Modus (z. B. .price, .stock)
p2c-product-stock_<id> — reines Bestands-Tag, separat exponiert, damit die product_stock-Blocklist-Kategorie es isolieren kann
p2c-category-<id> — volles Kategorie-Tag
p2c-listing-<categoryId> — Listing-Tag (gepurged, wenn sich ein listing-relevantes Feld eines Mitglieds-Produkts ändert)
p2c-cms-page-<id> — CMS-Seiten-Tag
p2c-buybox-<productId> — Async-Buybox-Tag
Diese Tags werden per xkey an Varnish gesendet und treiben auch das lokale Invalidierungs-Lookup.
Neuen Cache-Typ hinzufügen: Auf KernelEvents::RESPONSE subscriben, Typ über das Response-Objekt setzen und einen Tag-Prefix hinzufügen. getCacheStatsByType() ergänzen, damit es davon weiß.
Feld zum Smart-Mapping hinzufügen: SmartInvalidationAnalyzer decoraten und analyzeProductChange() oder analyzeCategoryChange() überschreiben.
xkey-Blocklist-Kategorie hinzufügen: xkeyTagBlocklist-Config erweitern + passendes Muster in XkeySubscriber ergänzen.