summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Concerns/CreatesGroups.php13
-rw-r--r--src/Concerns/HasMiddleware.php7
-rw-r--r--src/Group.php6
-rw-r--r--src/Route.php2
-rw-r--r--src/RouteDefinition.php12
-rw-r--r--tests/Unit/GroupDefinitionTest.php2
-rw-r--r--tests/Unit/GroupTest.php2
-rw-r--r--tests/Unit/RouteDefinitionTest.php2
-rw-r--r--tests/Unit/RouteTest.php2
-rw-r--r--tests/Unit/RouterTest.php3
10 files changed, 51 insertions, 0 deletions
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();