diff --git a/core/performance.md b/core/performance.md index 2b40a4933d4..bf20218e9ef 100644 --- a/core/performance.md +++ b/core/performance.md @@ -282,6 +282,59 @@ final class UserResourcesSubscriber implements EventSubscriberInterface } ``` +### Invalidating Additional Tags on Mutation + +Implement `ApiPlatform\HttpCache\PurgeTagProviderInterface` to add extra cache tags to invalidate +when an entity is mutated. This is useful for any tags the built-in listener cannot resolve on its +own: sub-resource collection IRIs (e.g. `/parents/{parentId}/children`), surrogate-key prefixes, +class-based tags, or any custom invalidation strategy. + +```php +getParent()) { + return []; + } + + yield '/parents/'.$entity->getParent()->getId().'/children'; + } +} +``` + +#### Symfony + +With [autowiring and autoconfiguration](https://symfony.com/doc/current/service_container/autowiring.html) +enabled (the default), the service is automatically registered. To declare the service explicitly: + +```yaml +# config/services.yaml +services: + App\HttpCache\ChildPurgeTagProvider: + tags: + - name: api_platform.http_cache.purge_tag_provider +``` + +#### Laravel + +Register and tag the implementation in a service provider: + +```php +$this->app->bind(\App\HttpCache\ChildPurgeTagProvider::class); +$this->app->tag( + [\App\HttpCache\ChildPurgeTagProvider::class], + \ApiPlatform\HttpCache\PurgeTagProviderInterface::class +); +``` + ## Setting Custom HTTP Cache Headers The `cacheHeaders` attribute can be used to set custom HTTP cache headers: