summaryrefslogtreecommitdiff
path: root/src/Concerns/HasAncestors.php
diff options
context:
space:
mode:
authorSam Light <sam@lightscale.co.uk>2026-06-10 19:00:32 +0100
committerSam Light <sam@lightscale.co.uk>2026-06-10 19:00:32 +0100
commit6ad39e3ba64e518bcdba1fc32b6247375be39a8a (patch)
treecc7ba7901043428b327d454580460e7b67c399b9 /src/Concerns/HasAncestors.php
parent9e6a18235564df5046c40570a864bcbd5c8bcf62 (diff)
shared code in traits for common features for groups
Diffstat (limited to 'src/Concerns/HasAncestors.php')
-rw-r--r--src/Concerns/HasAncestors.php37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/Concerns/HasAncestors.php b/src/Concerns/HasAncestors.php
new file mode 100644
index 0000000..248e9c8
--- /dev/null
+++ b/src/Concerns/HasAncestors.php
@@ -0,0 +1,37 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Lightscale\Router\Concerns;
+
+trait HasAncestors
+{
+ private const MAX_ANCESTORY_DEPTH = 100;
+
+ /** @return self[] */
+ public function getAncestors(): array
+ {
+ $results = [];
+
+ $count = 0;
+ $instance = $this->parent;
+ while (
+ null !== $instance
+ && $count++ < self::MAX_ANCESTORY_DEPTH
+ ) {
+ $results[] = $instance;
+ $instance = $instance->parent;
+ }
+
+ return array_reverse($results);
+ }
+
+ /** @return self[] */
+ public function getAncestorsAndSelf(): array
+ {
+ $results = $this->getAncestors();
+ $results[] = $this;
+
+ return $results;
+ }
+}