Szybka referencja, co jest w pluginie — przydatna dla developerów theme’a, autorów pluginów i każdego diagnozującego nieoczekiwane zachowanie.
├── Api/ REST controllers (endpointy admin)
├── Command/ Komendy konsoli Symfony
├── Decorator/ Dekoratory wokół core serwisów Shopware
├── Entity/ Definicje DAL dla własnych tabel pluginu
├── Enum/ Stałe trybów / strategii
├── Factory/ Fabryka cache-adapter
├── Framework/ Implementacja cache store
├── Message/ Async message dispatchowane przez plugin
├── MessageHandler/ Handlery dla tych message
├── Migration/ Migracje bazy danych
├── P2LabCache.php Entry point pluginu (lifecycle)
├── ScheduledTask/ Trzy nocne zadania czyszczące (+ handlery)
├── Service/ Serwisy domenowe (większość logiki)
├── Subscriber/ Event subscribery wpinające się w Shopware
Serwis Co robi CacheEntryServiceCzyta / zapisuje tabelę metadanych p2lab_cache_entry CacheInvalidationServiceTop-level API inwalidacji — clearAll(), clearAllProducts() itp. CacheWarmupServiceOdkrywa cache’owalne URL-e, tworzy wpisy progress, batchuje je CacheSizeServiceRaportuje całkowity rozmiar cache (dysk dla Filesystem; baza dla Redis / APCu) SmartInvalidationAnalyzerMapowanie pole-do-tagu dla trybu Smart inwalidacji CacheInvalidationLogServicePersystuje wiersze w p2lab_cache_invalidation_log ReverseProxyLogServicePersystuje wiersze w p2lab_cache_reverse_proxy_log, plus query analityczne CacheTagServiceBuduje zestaw tagów dla danej odpowiedzi TagParserServiceParsuje nazwy tagów z powrotem na referencje encji dla widoków logu RequestServiceInspekcjonuje żądania, by zdecydować o cacheability i wyliczyć klucz cache SettingsServiceCzyta wartości system_config z fallbackiem per kanał sprzedaży
Dekoruje Cel SalesChannelContextFactoryCache’owany sales-channel context dla workerów warmupu ReverseProxyGatewayDodaje strategię xkey + blocklistę + splitowanie / skracanie przed wysłaniem purge do Varnisha
Subscriber Słucha Co robi CacheEntryFlushSubscriberKernelEvents::TERMINATEPersystuje metadane nowo zapisanych wpisów po wysłaniu odpowiedzi CacheInvalidationSubscriberEventy entity-written Triggeruje pipeline inwalidacji (Manual / Basic / Extended / Precise / Smart) CacheResponseSubscriberKernelEvents::RESPONSEZapisuje odpowiedź do backendu, jeśli cache’owalna; ustawia nagłówki Cache-Control NotificationMessageSubscriberCustom plugin events Pushuje notyfikacje admin (ukończenie warmupu itp.) TagCollectionSubscriberEventy entity-loaded Zbiera zestaw tagów, który odpowiedź powinna nieść XkeySubscriberPre-purge event Aplikuje blocklistę, splitowanie i skracanie na wychodzące nagłówki xkey
Message Handler Cel CacheWarmupStartMessageCacheWarmupStartHandlerOdpala run warmupu; spawnuje message batchowe CacheWarmupBatchMessageCacheWarmupBatchHandlerPrzetwarza jeden batch URL-i
Zadanie Domyślny interwał Co robi p2lab_cache.cleanup_cache_entries24 h Usuwa osierocone wiersze p2lab_cache_entry p2lab_cache.cleanup_invalidation_log24 h Usuwa wiersze logu inwalidacji starsze niż 30 dni p2lab_cache.cleanup_reverse_proxy_log24 h Usuwa wiersze logu reverse-proxy starsze niż 30 dni
Zobacz Zadania zaplanowane .
Tabela Cel p2lab_cache_entryMetadane każdego wpisu cache (rozmiar, typ, czas generowania / hit) p2lab_cache_invalidation_logKażde zdarzenie inwalidacji p2lab_cache_reverse_proxy_logKażdy xkey purge wysłany do Varnisha p2lab_cache_warmup_progressJeden wiersz na run warmupu; śledzi offset i liczniki p2lab_cache_warmup_failed_urlURL-e, które failowały podczas warmupu
Tagi cache tworzone przez plugin wszystkie zaczynają się od p2c-. Konwencje:
p2c-product-<id> — pełny tag produktu (jakakolwiek zmiana pola purguje)
p2c-product-<id>.<field> — tag na poziomie pola w trybie Smart (np. .price, .stock)
p2c-product-stock_<id> — tag tylko-stock, wystawiony osobno, by kategoria blocklisty product_stock mogła go izolować
p2c-category-<id> — pełny tag kategorii
p2c-listing-<categoryId> — tag listingu (purgowany, gdy pole członkowskiego produktu listing-affecting się zmienia)
p2c-cms-page-<id> — tag strony CMS
p2c-buybox-<productId> — tag async buyboxa
Te tagi są wysyłane do Varnisha przez xkey i też napędzają lokalny lookup inwalidacji.
Dodaj nowy typ cache: zasubskrybuj KernelEvents::RESPONSE, ustaw typ przez obiekt odpowiedzi i dodaj prefiks tagu. Zaktualizuj getCacheStatsByType(), by o nim wiedział.
Dodaj pole do mapowania Smart: dekoruj SmartInvalidationAnalyzer i nadpisuj analyzeProductChange() lub analyzeCategoryChange().
Dodaj kategorię blocklisty xkey: rozszerz config xkeyTagBlocklist + dodaj pasujący wzorzec w XkeySubscriber.