Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
freekmurze committed Jan 3, 2022
1 parent 668c976 commit 6551ff2
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 20 deletions.
20 changes: 20 additions & 0 deletions config/route-discovery.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
<?php

use Spatie\RouteDiscovery\NodeTransformers\AddControllerUriToActions;
use Spatie\RouteDiscovery\NodeTransformers\FixUrisOfNestedControllers;
use Spatie\RouteDiscovery\NodeTransformers\HandleCustomHttpMethods;
use Spatie\RouteDiscovery\NodeTransformers\HandleCustomMiddleware;
use Spatie\RouteDiscovery\NodeTransformers\HandleCustomRouteName;

return [
/*
* Routes will be registered for all controllers found in
Expand All @@ -16,4 +22,18 @@
'discover_views_in_directory' => [
// 'docs' => resource_path('views/docs'),
],

/*
* After having discovered all controllers, these classes will manipulate the routes
* before registering them to Laravel.
*
* In most cases, you shouldn't change these
*/
'node_tree_transformers' => [
AddControllerUriToActions::class,
HandleCustomRouteName::class,
HandleCustomMiddleware::class,
HandleCustomHttpMethods::class,
FixUrisOfNestedControllers::class,
]
];
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,20 @@
use Spatie\RouteDiscovery\NodeTree\Node;
use Throwable;

class ProcessRouteAttributes implements NodeTransformer
class HandleCustomHttpMethods implements NodeTransformer
{
/** @param Collection<Node> $nodes */
public function transform(Collection $nodes): void
{
$nodes->each(function (Node $node) {
$node->actions->each(function (Action $action) {
$routeAttribute = $action->getRouteAttribute();

if (!$routeAttribute) {
return null;
if (! $routeAttribute = $action->getRouteAttribute()) {
return;
}

if ($httpMethods = $routeAttribute->methods) {
$action->methods = $httpMethods;
}

if ($name = $routeAttribute->name) {
$action->name = $name;
}

$action->middleware = $routeAttribute->middleware;

});
});
}
Expand Down
28 changes: 28 additions & 0 deletions src/NodeTransformers/HandleCustomMiddleware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Spatie\RouteDiscovery\NodeTransformers;

use Illuminate\Support\Collection;
use ReflectionAttribute;
use Spatie\RouteDiscovery\Attributes\Route;
use Spatie\RouteDiscovery\Attributes\RouteAttribute;
use Spatie\RouteDiscovery\NodeTree\Action;
use Spatie\RouteDiscovery\NodeTree\Node;
use Throwable;

class HandleCustomMiddleware implements NodeTransformer
{
/** @param Collection<Node> $nodes */
public function transform(Collection $nodes): void
{
$nodes->each(function (Node $node) {
$node->actions->each(function (Action $action) {
if (! $routeAttribute = $action->getRouteAttribute()) {
return;
}

$action->middleware = $routeAttribute->middleware;
});
});
}
}
30 changes: 30 additions & 0 deletions src/NodeTransformers/HandleCustomRouteName.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Spatie\RouteDiscovery\NodeTransformers;

use Illuminate\Support\Collection;
use ReflectionAttribute;
use Spatie\RouteDiscovery\Attributes\Route;
use Spatie\RouteDiscovery\Attributes\RouteAttribute;
use Spatie\RouteDiscovery\NodeTree\Action;
use Spatie\RouteDiscovery\NodeTree\Node;
use Throwable;

class HandleCustomRouteName implements NodeTransformer
{
/** @param Collection<Node> $nodes */
public function transform(Collection $nodes): void
{
$nodes->each(function (Node $node) {
$node->actions->each(function (Action $action) {
if (! $routeAttribute = $action->getRouteAttribute()) {
return;
}

if ($name = $routeAttribute->name) {
$action->name = $name;
}
});
});
}
}
15 changes: 7 additions & 8 deletions src/RouteRegistrar.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use Illuminate\Support\Collection;
use Spatie\RouteDiscovery\NodeTransformers\AddControllerUriToActions;
use Spatie\RouteDiscovery\NodeTransformers\FixUrisOfNestedControllers;
use Spatie\RouteDiscovery\NodeTransformers\HandleCustomHttpMethods;
use Spatie\RouteDiscovery\NodeTransformers\HandleCustomMiddleware;
use Spatie\RouteDiscovery\NodeTransformers\NodeTransformer;
use Spatie\RouteDiscovery\NodeTransformers\ProcessRouteAttributes;
use Spatie\RouteDiscovery\NodeTransformers\HandleCustomRouteName;
use Spatie\RouteDiscovery\NodeTree\Action;
use Spatie\RouteDiscovery\NodeTree\Node;
use Spatie\RouteDiscovery\NodeTree\NodeFactory;
Expand Down Expand Up @@ -83,20 +85,17 @@ protected function convertToNodes(string $directory): Collection
})
->filter()
/** @phpstan-ignore-next-line */
->each(fn (Node $node) => $nodes->push($node));
->each(fn(Node $node) => $nodes->push($node));

return $nodes;
}

/** @param Collection<Node> $nodes */
protected function transformNodes(Collection $nodes): void
{
collect([
new AddControllerUriToActions(),
new ProcessRouteAttributes(),
new FixUrisOfNestedControllers(),
])
->each(fn (NodeTransformer $middleware) => $middleware->transform($nodes));
collect(config('route-discovery.node_tree_transformers'))
->map(fn(string $transformerClass) => app($transformerClass))
->each(fn(NodeTransformer $middleware) => $middleware->transform($nodes));
}

protected function registerRoutes(Collection $nodes): void
Expand Down

0 comments on commit 6551ff2

Please sign in to comment.