From 21e140859ee7a3fef6b809ef8e72456bac7f57aa Mon Sep 17 00:00:00 2001 From: Tim Kelty Date: Fri, 17 Nov 2023 09:57:59 -0500 Subject: [PATCH] Cache purge tag --- src/HeaderEnum.php | 3 +-- src/StaticCaching.php | 22 +++++++++++++++------- src/web/ResponseBehavior.php | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/HeaderEnum.php b/src/HeaderEnum.php index c8283c2..7a174ef 100644 --- a/src/HeaderEnum.php +++ b/src/HeaderEnum.php @@ -5,7 +5,6 @@ enum HeaderEnum: string { case CACHE_TAG = 'Cache-Tag'; - case CACHE_PURGE_TAG = 'Cache-Purge-Tag'; - case CACHE_PURGE_HOST = 'Cache-Purge-Host'; + case CACHE_PURGE = 'Cache-Purge'; case CACHE_CONTROL = 'Cache-Control'; } diff --git a/src/StaticCaching.php b/src/StaticCaching.php index 1692b1c..9080555 100644 --- a/src/StaticCaching.php +++ b/src/StaticCaching.php @@ -11,7 +11,6 @@ use craft\web\UrlManager; use craft\web\View; use Illuminate\Support\Collection; -use League\Uri\Uri; use samdark\log\PsrMessage; use yii\caching\TagDependency; @@ -76,15 +75,24 @@ public function handleRegisterCacheOptions(RegisterCacheOptionsEvent $event): vo public function purgeAll(): void { - if (Craft::$app->getRequest()->isConsoleRequest) { - $url = Uri::new(UrlHelper::baseSiteUrl()); + if (Craft::$app->getRequest()->getIsConsoleRequest()) { + // TODO: should this hit a ping/healthcheck controller instead? + $url = UrlHelper::baseSiteUrl(); + + if (str_starts_with($url, '@web')) { + $message = implode(PHP_EOL, [ + 'Unable to clear static caches because the web host isn\'t known for console commands.', + 'Explicitly set the @web alias in config/general.php to avoid this error.', + 'See https://craftcms.com/docs/4.x/config/#aliases for more info.', + ]); - // TODO: warn about @web not being defined for CLI + throw new \yii\console\Exception($message); + } Craft::createGuzzleClient() ->request('HEAD', (string) $url, [ 'headers' => [ - HeaderEnum::CACHE_PURGE_HOST->value => '*', + HeaderEnum::CACHE_PURGE->value => '*', ], ]); @@ -93,7 +101,7 @@ public function purgeAll(): void Craft::$app->getResponse()->getHeaders()->set( - HeaderEnum::CACHE_PURGE_HOST->value, '*', + HeaderEnum::CACHE_PURGE->value, '*', ); } @@ -195,7 +203,7 @@ protected function addCachePurgeTagsToResponse(array $tags): void $headers = Craft::$app->getResponse()->getHeaders(); $tagsForHeader->each(fn(string $tag) => $headers->add( - HeaderEnum::CACHE_PURGE_TAG->value, + HeaderEnum::CACHE_PURGE->value, $tag, )); } diff --git a/src/web/ResponseBehavior.php b/src/web/ResponseBehavior.php index 4215f67..4a07f1b 100644 --- a/src/web/ResponseBehavior.php +++ b/src/web/ResponseBehavior.php @@ -23,7 +23,7 @@ public function init(): void { $this->csvHeaders = [ HeaderEnum::CACHE_TAG->value, - HeaderEnum::CACHE_PURGE_TAG->value, + HeaderEnum::CACHE_PURGE->value, ]; }