diff --git a/src/Routing/PendingRelationshipRegistration.php b/src/Routing/PendingRelationshipRegistration.php index d0a5934..7214bde 100644 --- a/src/Routing/PendingRelationshipRegistration.php +++ b/src/Routing/PendingRelationshipRegistration.php @@ -164,6 +164,20 @@ public function middleware(string ...$middleware): self return $this; } + + + /** + * Add middleware to the resource routes. + * + * @param Closure|array $middleware + * @return $this + */ + public function routeActionMiddleware(array|\Closure $middleware): self + { + $this->options['route_action_middleware'] = $middleware; + + return $this; + } /** * Specify middleware that should be removed from the resource routes. diff --git a/src/Routing/PendingResourceRegistration.php b/src/Routing/PendingResourceRegistration.php index d07c8f3..77a4313 100644 --- a/src/Routing/PendingResourceRegistration.php +++ b/src/Routing/PendingResourceRegistration.php @@ -189,6 +189,20 @@ public function middleware(string ...$middleware): self return $this; } + + + /** + * Add middleware to the resource routes. + * + * @param Closure|array $middleware + * @return $this + */ + public function routeActionMiddleware(array|Closure $middleware): self + { + $this->options['route_action_middleware'] = $middleware; + + return $this; + } /** * Specify middleware that should be removed from the resource routes. diff --git a/src/Routing/RelationshipRegistrar.php b/src/Routing/RelationshipRegistrar.php index a9aae8a..83b0a0b 100644 --- a/src/Routing/RelationshipRegistrar.php +++ b/src/Routing/RelationshipRegistrar.php @@ -276,10 +276,27 @@ private function getRelationshipAction( if (isset($options['middleware'])) { $action['middleware'] = $options['middleware']; } - + if (isset($options['excluded_middleware'])) { $action['excluded_middleware'] = $options['excluded_middleware']; } + if (isset($options['route_action_middleware'])) { + /** @var \closure|array $routeMiddlewareMap */ + $routeMiddlewareMap = $options['route_action_middleware']; + /** @var string|string[] $routeActionMiddleware */ + $routeActionMiddleware = is_callable($routeMiddlewareMap) ? $routeMiddlewareMap( + Str::classify($this->resourceType), + Str::classify($method), + Str::classify($defaultName) + ) : ($routeMiddlewareMap[$method] ?? []); + /** @var string[] $newMiddleware */ + $newMiddleware = is_array($routeActionMiddleware) ? $routeActionMiddleware : [$routeActionMiddleware]; + /** @var string[] $oldMiddleware */ + $oldMiddleware = $action['middleware'] ?? []; + + // dd($oldMiddleware, $routeActionMiddleware); + $action['middleware'] = array_merge($oldMiddleware, $newMiddleware); + } return $action; } diff --git a/src/Routing/ResourceRegistrar.php b/src/Routing/ResourceRegistrar.php index bde73d8..397c882 100644 --- a/src/Routing/ResourceRegistrar.php +++ b/src/Routing/ResourceRegistrar.php @@ -349,6 +349,23 @@ private function getResourceAction( if (isset($options['excluded_middleware'])) { $action['excluded_middleware'] = $options['excluded_middleware']; } + + if (isset($options['route_action_middleware'])) { + /** @var \closure|array $routeMiddlewareMap */ + $routeMiddlewareMap = $options['route_action_middleware']; + /** @var string|string[] $routeActionMiddleware */ + $routeActionMiddleware = is_callable($routeMiddlewareMap) ? $routeMiddlewareMap( + Str::classify($resourceType), + Str::classify($method), + ) : ($routeMiddlewareMap[$method] ?? []); + /** @var string[] $newMiddleware */ + $newMiddleware = is_array($routeActionMiddleware) ? $routeActionMiddleware : [$routeActionMiddleware]; + /** @var string[] $oldMiddleware */ + $oldMiddleware = $action['middleware'] ?? []; + + // dd($oldMiddleware, $routeActionMiddleware); + $action['middleware'] = array_merge($oldMiddleware, $newMiddleware); + } $action['where'] = $this->getWheres($resourceType, $parameter, $options); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy