diff options
| author | Sam Light <sam@lightscale.co.uk> | 2026-06-10 19:00:32 +0100 |
|---|---|---|
| committer | Sam Light <sam@lightscale.co.uk> | 2026-06-10 19:00:32 +0100 |
| commit | 6ad39e3ba64e518bcdba1fc32b6247375be39a8a (patch) | |
| tree | cc7ba7901043428b327d454580460e7b67c399b9 /src/Concerns | |
| parent | 9e6a18235564df5046c40570a864bcbd5c8bcf62 (diff) | |
shared code in traits for common features for groups
Diffstat (limited to 'src/Concerns')
| -rw-r--r-- | src/Concerns/CreatesGroups.php | 28 | ||||
| -rw-r--r-- | src/Concerns/CreatesRoutes.php | 41 | ||||
| -rw-r--r-- | src/Concerns/HasAncestors.php | 37 |
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; + } +} |
