summaryrefslogtreecommitdiff
path: root/src/Concerns
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
parent9e6a18235564df5046c40570a864bcbd5c8bcf62 (diff)
shared code in traits for common features for groups
Diffstat (limited to 'src/Concerns')
-rw-r--r--src/Concerns/CreatesGroups.php28
-rw-r--r--src/Concerns/CreatesRoutes.php41
-rw-r--r--src/Concerns/HasAncestors.php37
3 files changed, 106 insertions, 0 deletions
diff --git a/src/Concerns/CreatesGroups.php b/src/Concerns/CreatesGroups.php
new file mode 100644
index 0000000..e6e4588
--- /dev/null
+++ b/src/Concerns/CreatesGroups.php
@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Lightscale\Router\Concerns;
+
+use Lightscale\Router\Group;
+
+trait CreatesGroups
+{
+ public function prefix(string $value): Group
+ {
+ return new Group(
+ router: $this->getRouter(),
+ parent: $this->getGroup(),
+ prefix: $value,
+ );
+ }
+
+ public function name(string $value): Group
+ {
+ return new Group(
+ router: $this->getRouter(),
+ parent: $this->getGroup(),
+ name: $value,
+ );
+ }
+}
diff --git a/src/Concerns/CreatesRoutes.php b/src/Concerns/CreatesRoutes.php
new file mode 100644
index 0000000..6a8f65b
--- /dev/null
+++ b/src/Concerns/CreatesRoutes.php
@@ -0,0 +1,41 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Lightscale\Router\Concerns;
+
+use Lightscale\Router\Enums\HttpMethod;
+use Lightscale\Router\RouteDefinition;
+
+trait CreatesRoutes
+{
+ public function get(string $path, callable $handler): RouteDefinition
+ {
+ return $this->make(HttpMethod::Get, $path, $handler);
+ }
+
+ public function post(string $path, callable $handler): RouteDefinition
+ {
+ return $this->make(HttpMethod::Post, $path, $handler);
+ }
+
+ public function put(string $path, callable $handler): RouteDefinition
+ {
+ return $this->make(HttpMethod::Put, $path, $handler);
+ }
+
+ public function patch(string $path, callable $handler): RouteDefinition
+ {
+ return $this->make(HttpMethod::Patch, $path, $handler);
+ }
+
+ public function delete(string $path, callable $handler): RouteDefinition
+ {
+ return $this->make(HttpMethod::Delete, $path, $handler);
+ }
+
+ public function any(string $path, callable $handler): RouteDefinition
+ {
+ return $this->make(HttpMethod::Any, $path, $handler);
+ }
+}
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;
+ }
+}