diff --git a/src/Assets/AugmentedAsset.php b/src/Assets/AugmentedAsset.php index fb895df50b3..a49727b431a 100644 --- a/src/Assets/AugmentedAsset.php +++ b/src/Assets/AugmentedAsset.php @@ -8,8 +8,14 @@ class AugmentedAsset extends AbstractAugmented { + private $cachedKeys; + public function keys() { + if ($this->cachedKeys) { + return $this->cachedKeys; + } + $keys = $this->data->data()->keys() ->merge($this->data->supplements()->keys()) ->merge([ @@ -65,7 +71,7 @@ public function keys() ]); } - return $keys->merge($this->blueprintFields()->keys())->unique()->all(); + return $this->cachedKeys = $keys->merge($this->blueprintFields()->keys())->unique()->all(); } protected function isAsset() diff --git a/src/Auth/AugmentedUser.php b/src/Auth/AugmentedUser.php index 296459d4c31..657eff38ae3 100644 --- a/src/Auth/AugmentedUser.php +++ b/src/Auth/AugmentedUser.php @@ -11,9 +11,15 @@ class AugmentedUser extends AbstractAugmented { + private $cachedKeys; + public function keys() { - return $this->data->data()->keys() + if ($this->cachedKeys) { + return $this->cachedKeys; + } + + return $this->cachedKeys = $this->data->data()->keys() ->merge(collect($this->data->supplements() ?? [])->keys()) ->merge($this->commonKeys()) ->merge($this->roleHandles()) diff --git a/src/Data/HasOrigin.php b/src/Data/HasOrigin.php index 6f74a37ff92..a22d29a1d8f 100644 --- a/src/Data/HasOrigin.php +++ b/src/Data/HasOrigin.php @@ -10,16 +10,21 @@ trait HasOrigin * @var string */ protected $origin; + private $cachedKeys; public function keys() { + if ($this->cachedKeys) { + return $this->cachedKeys; + } + $originFallbackKeys = method_exists($this, 'getOriginFallbackValues') ? $this->getOriginFallbackValues()->keys() : collect(); $originKeys = $this->hasOrigin() ? $this->origin()->keys() : collect(); $computedKeys = method_exists($this, 'computedKeys') ? $this->computedKeys() : []; - return collect() + return $this->cachedKeys = collect() ->merge($originFallbackKeys) ->merge($originKeys) ->merge($this->data->keys()) diff --git a/src/Entries/AugmentedEntry.php b/src/Entries/AugmentedEntry.php index 6388f554e81..65c67b8fd40 100644 --- a/src/Entries/AugmentedEntry.php +++ b/src/Entries/AugmentedEntry.php @@ -8,9 +8,15 @@ class AugmentedEntry extends AbstractAugmented { + private $cachedKeys; + public function keys() { - return $this->data->keys() + if ($this->cachedKeys) { + return $this->cachedKeys; + } + + return $this->cachedKeys = $this->data->keys() ->merge($this->data->supplements()->keys()) ->merge($this->commonKeys()) ->merge($this->blueprintFields()->keys()) diff --git a/src/Globals/AugmentedVariables.php b/src/Globals/AugmentedVariables.php index 9eacf32dd98..440b8c685f2 100644 --- a/src/Globals/AugmentedVariables.php +++ b/src/Globals/AugmentedVariables.php @@ -6,9 +6,15 @@ class AugmentedVariables extends AbstractAugmented { + private $cachedKeys; + public function keys() { - return $this->data->values()->keys()->all(); + if ($this->cachedKeys) { + return $this->cachedKeys; + } + + return $this->cachedKeys = $this->data->values()->keys()->all(); } public function site() diff --git a/src/Structures/AugmentedPage.php b/src/Structures/AugmentedPage.php index 22b9683236a..e2cd7f0286f 100644 --- a/src/Structures/AugmentedPage.php +++ b/src/Structures/AugmentedPage.php @@ -9,6 +9,7 @@ class AugmentedPage extends AugmentedEntry { protected $page; protected $hasEntry = false; + private $cachedKeys; private $fieldsCache; public function __construct($page) @@ -25,6 +26,10 @@ public function __construct($page) public function keys() { + if ($this->cachedKeys) { + return $this->cachedKeys; + } + $keys = collect($this->hasEntry ? parent::keys() : ['title', 'url', 'uri', 'permalink', 'id']); @@ -36,7 +41,7 @@ public function keys() $keys = Statamic::isApiRoute() ? $this->apiKeys($keys) : $keys; - return $keys->unique()->sort()->values()->all(); + return $this->cachedKeys = $keys->unique()->sort()->values()->all(); } private function apiKeys($keys) diff --git a/src/Taxonomies/AugmentedTerm.php b/src/Taxonomies/AugmentedTerm.php index 26cfe1a4574..4c9c06e958a 100644 --- a/src/Taxonomies/AugmentedTerm.php +++ b/src/Taxonomies/AugmentedTerm.php @@ -8,9 +8,15 @@ class AugmentedTerm extends AbstractAugmented { + private $cachedKeys; + public function keys() { - return $this->data->values()->keys() + if ($this->cachedKeys) { + return $this->cachedKeys; + } + + return $this->cachedKeys = $this->data->values()->keys() ->merge($this->data->supplements()->keys()) ->merge($this->commonKeys()) ->merge($this->blueprintFields()->keys())