From 7144cad2df09b68a7359955242aabef746a826b3 Mon Sep 17 00:00:00 2001 From: Sam Light Date: Wed, 10 Jun 2026 19:00:33 +0100 Subject: Setup structure for storing middleware and added test todos --- src/Concerns/CreatesGroups.php | 13 +++++++++++++ src/Concerns/HasMiddleware.php | 7 +++++++ src/Group.php | 6 ++++++ src/Route.php | 2 ++ src/RouteDefinition.php | 12 ++++++++++++ tests/Unit/GroupDefinitionTest.php | 2 ++ tests/Unit/GroupTest.php | 2 ++ tests/Unit/RouteDefinitionTest.php | 2 ++ tests/Unit/RouteTest.php | 2 ++ tests/Unit/RouterTest.php | 3 +++ 10 files changed, 51 insertions(+) diff --git a/src/Concerns/CreatesGroups.php b/src/Concerns/CreatesGroups.php index e6e4588..4a2b862 100644 --- a/src/Concerns/CreatesGroups.php +++ b/src/Concerns/CreatesGroups.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Lightscale\Router\Concerns; +use Lightscale\Router\Contracts\Middleware; use Lightscale\Router\Group; trait CreatesGroups @@ -25,4 +26,16 @@ trait CreatesGroups name: $value, ); } + + /** @param Middleware|Middleware[] $value */ + public function middleware(Middleware|array $value): Group + { + $value = is_array($value) ? $value : [$value]; + + return new Group( + router: $this->getRouter(), + parent: $this->getGroup(), + middleware: $value, + ); + } } diff --git a/src/Concerns/HasMiddleware.php b/src/Concerns/HasMiddleware.php index e0c6b1a..ccde485 100644 --- a/src/Concerns/HasMiddleware.php +++ b/src/Concerns/HasMiddleware.php @@ -19,6 +19,13 @@ trait HasMiddleware ...$this->middleware, ...$middleware, ]; + return $this; } + + /** @return Middleware[] */ + public function getMiddleware(): array + { + return $this->middleware; + } } diff --git a/src/Group.php b/src/Group.php index 05fa93b..9faae2c 100644 --- a/src/Group.php +++ b/src/Group.php @@ -4,16 +4,22 @@ declare(strict_types=1); namespace Lightscale\Router; +use Lightscale\Router\Contracts\Middleware; + class Group { use Concerns\HasAncestors; + use Concerns\HasMiddleware; + /** @param Middleware[] $middleware */ public function __construct( private Router $router, private ?Group $parent, private ?string $prefix = null, private ?string $name = null, + array $middleware = [], ) { + $this->middleware = $middleware; } public function getRouter(): Router diff --git a/src/Route.php b/src/Route.php index f432d61..58c2397 100644 --- a/src/Route.php +++ b/src/Route.php @@ -9,6 +9,8 @@ use Lightscale\Router\Enums\HttpMethod; class Route { + use Concerns\HasMiddleware; + protected Closure $handler; protected PathSegment $segment; diff --git a/src/RouteDefinition.php b/src/RouteDefinition.php index 860c918..b015ba8 100644 --- a/src/RouteDefinition.php +++ b/src/RouteDefinition.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Lightscale\Router; +use Lightscale\Router\Contracts\Middleware; + class RouteDefinition { public function __construct( @@ -31,6 +33,16 @@ class RouteDefinition return $this; } + /** @param Middleware|Middleware[] $value */ + public function middleware(Middleware|array $value): static + { + $value = is_array($value) ? $value : [$value]; + + $this->route->addMiddleware($value); + + return $this; + } + public function getRoute(): Route { return $this->route; diff --git a/tests/Unit/GroupDefinitionTest.php b/tests/Unit/GroupDefinitionTest.php index f11cb87..3ea8275 100644 --- a/tests/Unit/GroupDefinitionTest.php +++ b/tests/Unit/GroupDefinitionTest.php @@ -41,3 +41,5 @@ it('returns RouteDefinition when making :dataset route') ->{$m->value}('/hello', fn () => null) ) ->toBeInstanceOf(RouteDefinition::class); + +it('can create a group with middleware')->todo(); diff --git a/tests/Unit/GroupTest.php b/tests/Unit/GroupTest.php index 58d58d6..fc7ead3 100644 --- a/tests/Unit/GroupTest.php +++ b/tests/Unit/GroupTest.php @@ -139,3 +139,5 @@ it('gets the name with three ancestors, one without name') )->name('test2.') )->name('test3.')->getFullName()) ->toBe('test1.test2.test3.'); + +it('has middleware')->todo(); diff --git a/tests/Unit/RouteDefinitionTest.php b/tests/Unit/RouteDefinitionTest.php index 37a98b9..0e02bac 100644 --- a/tests/Unit/RouteDefinitionTest.php +++ b/tests/Unit/RouteDefinitionTest.php @@ -41,3 +41,5 @@ it('gets the route', function () { expect($def->getRoute())->toBe($route); }); + +it('adds middleware to route')->todo(); diff --git a/tests/Unit/RouteTest.php b/tests/Unit/RouteTest.php index e4ce06d..e4501b4 100644 --- a/tests/Unit/RouteTest.php +++ b/tests/Unit/RouteTest.php @@ -53,3 +53,5 @@ it('can get handler', function () { ); expect($r->getHandler())->toBe($h); }); + +it('has middleware')->todo(); diff --git a/tests/Unit/RouterTest.php b/tests/Unit/RouterTest.php index d0f8912..dcbb599 100644 --- a/tests/Unit/RouterTest.php +++ b/tests/Unit/RouterTest.php @@ -330,3 +330,6 @@ it('builds routes in groups', function () { expect($router->getNamedRoute('no-prefix.test3'))->toBe($r3); expect($router->getNamedRoute('test4'))->toBe($r4); }); + +it('has middleware')->todo(); +it('can create a group with middleware')->todo(); -- cgit v1.2.3