diff --git a/src/StaticCaching/Middleware/Cache.php b/src/StaticCaching/Middleware/Cache.php index 705e6ded4f..152e2f386f 100644 --- a/src/StaticCaching/Middleware/Cache.php +++ b/src/StaticCaching/Middleware/Cache.php @@ -15,6 +15,7 @@ use Statamic\StaticCaching\NoCache\RegionNotFound; use Statamic\StaticCaching\NoCache\Session; use Statamic\StaticCaching\Replacer; +use Statamic\StaticCaching\ResponseStatus; use Symfony\Component\Lock\LockFactory; use Symfony\Component\Lock\NoLock; use Symfony\Component\Lock\Store\FlockStore; @@ -99,6 +100,8 @@ private function attemptToGetCachedResponse($request) $this->makeReplacements($response); + $response->setStaticCacheResponseStatus(ResponseStatus::HIT); + return $response; } } diff --git a/src/StaticCaching/ResponseStatus.php b/src/StaticCaching/ResponseStatus.php new file mode 100644 index 0000000000..121ba9b395 --- /dev/null +++ b/src/StaticCaching/ResponseStatus.php @@ -0,0 +1,10 @@ +responses[spl_object_id($response)] = $status; + } + + public function get(Response $response): ResponseStatus + { + return $this->responses[spl_object_id($response)] ?? ResponseStatus::UNDEFINED; + } + + public function registerMacros(): void + { + $tracker = $this; + + Response::macro('setStaticCacheResponseStatus', fn ($status) => $tracker->set($this, $status)); + + Response::macro('staticCacheResponseStatus', fn () => $tracker->get($this)); + + Response::macro('wasStaticallyCached', fn () => $this->staticCacheResponseStatus() === ResponseStatus::HIT); + } +} diff --git a/src/StaticCaching/ServiceProvider.php b/src/StaticCaching/ServiceProvider.php index 6fad890af0..5ce15cead2 100644 --- a/src/StaticCaching/ServiceProvider.php +++ b/src/StaticCaching/ServiceProvider.php @@ -62,6 +62,8 @@ public function register() $urls ); }); + + $this->app->singleton(ResponseStatusTracker::class, fn () => new ResponseStatusTracker); } public function boot() @@ -87,5 +89,7 @@ public function boot() return $this; }); + + $this->app[ResponseStatusTracker::class]->registerMacros(); } }