Skip to content

Commit f516b0f

Browse files
authored
fix: cache headers (#4777)
1 parent dd04e76 commit f516b0f

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

src/HttpCache/EventListener/AddHeadersListener.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
namespace ApiPlatform\HttpCache\EventListener;
1515

1616
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
17+
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
18+
use ApiPlatform\Util\OperationRequestInitiatorTrait;
1719
use ApiPlatform\Util\RequestAttributesExtractor;
1820
use Symfony\Component\HttpKernel\Event\ResponseEvent;
1921

@@ -26,6 +28,8 @@
2628
*/
2729
final class AddHeadersListener
2830
{
31+
use OperationRequestInitiatorTrait;
32+
2933
private $etag;
3034
private $maxAge;
3135
private $sharedMaxAge;
@@ -35,7 +39,10 @@ final class AddHeadersListener
3539
private $staleWhileRevalidate;
3640
private $staleIfError;
3741

38-
public function __construct(bool $etag = false, int $maxAge = null, int $sharedMaxAge = null, array $vary = null, bool $public = null, ResourceMetadataFactoryInterface $resourceMetadataFactory = null, int $staleWhileRevalidate = null, int $staleIfError = null)
42+
/**
43+
* @param ResourceMetadataFactoryInterface|ResourceMetadataCollectionFactoryInterface $resourceMetadataFactory
44+
*/
45+
public function __construct(bool $etag = false, int $maxAge = null, int $sharedMaxAge = null, array $vary = null, bool $public = null, $resourceMetadataFactory = null, int $staleWhileRevalidate = null, int $staleIfError = null)
3946
{
4047
$this->etag = $etag;
4148
$this->maxAge = $maxAge;
@@ -65,13 +72,14 @@ public function onKernelResponse(ResponseEvent $event): void
6572
return;
6673
}
6774

68-
$resourceCacheHeaders = [];
75+
$operation = $this->initializeOperation($request);
76+
$resourceCacheHeaders = $attributes['cache_headers'] ?? [];
6977

70-
if ($this->resourceMetadataFactory) {
78+
if ($this->resourceMetadataFactory instanceof ResourceMetadataFactoryInterface) {
7179
$resourceMetadata = $this->resourceMetadataFactory->create($attributes['resource_class']);
7280
$resourceCacheHeaders = $resourceMetadata->getOperationAttribute($attributes, 'cache_headers', [], true);
73-
} else {
74-
$resourceCacheHeaders = $attributes['cache_headers'] ?? [];
81+
} elseif ($operation) {
82+
$resourceCacheHeaders = $operation->getCacheHeaders();
7583
}
7684

7785
if ($this->etag && !$response->getEtag()) {

src/Symfony/Bundle/Resources/config/http_cache.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<argument>%api_platform.http_cache.shared_max_age%</argument>
1212
<argument>%api_platform.http_cache.vary%</argument>
1313
<argument>%api_platform.http_cache.public%</argument>
14-
<argument>null</argument>
14+
<argument>api_platform.metadata.resource.metadata_collection_factory.retro_compatible</argument>
1515

1616
<tag name="kernel.event_listener" event="kernel.response" method="onKernelResponse" priority="-1" />
1717
</service>

0 commit comments

Comments
 (0)