From 4526c2f63eeec331feb64cde444e5ef71eaa1096 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Wed, 7 Feb 2024 09:32:27 +0000 Subject: [PATCH] Handle reaching of wildcard urls --- src/StaticCaching/Cachers/AbstractCacher.php | 36 +++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/StaticCaching/Cachers/AbstractCacher.php b/src/StaticCaching/Cachers/AbstractCacher.php index 8e494fcabd..9e88d585bd 100644 --- a/src/StaticCaching/Cachers/AbstractCacher.php +++ b/src/StaticCaching/Cachers/AbstractCacher.php @@ -263,7 +263,19 @@ public function invalidateUrls($urls) */ public function recacheUrls($urls) { - collect($urls)->each(fn ($url) => is_array($url) ? $this->recacheUrl(...$url) : $this->recacheUrl($url)); + collect($urls) + ->map(fn ($url) => is_array($url) ? $url : [$url, null]) + ->each(function ($parts) { + [$path, $domain] = $parts; + + if (Str::contains($path, '*')) { + $this->recacheWildcardUrl($path, $domain); + + return; + } + + $this->recacheUrl($path, $domain); + }); } /** @@ -278,6 +290,28 @@ public function recacheUrl($path, $domain = null) StaticRecacheJob::dispatch($path, $domain); } + /** + * Recache a wildcard URL. + * + * @param string $wildcard + * @param string|null $domain + */ + protected function recacheWildcardUrl($wildcard, $domain = null) + { + // Remove the asterisk + $wildcard = substr($wildcard, 0, -1); + + if (! $domain) { + [$wildcard, $domain] = $this->getPathAndDomain($wildcard); + } + + $this->getUrls($domain)->filter(function ($url) use ($wildcard) { + return Str::startsWith($url, $wildcard); + })->each(function ($url) use ($domain) { + $this->recacheUrl($url, $domain); + }); + } + /** * Determine if a given URL should be excluded from caching. *