Skip to content

Commit 8bb45ed

Browse files
authored
Merge pull request #14 from ensi-platform/task-81772
#81772
2 parents 52e59ac + e6d691c commit 8bb45ed

File tree

1 file changed

+44
-8
lines changed

1 file changed

+44
-8
lines changed

src/Generators/RoutesGenerator.php

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ public function generate(SpecObjectInterface $specObject): void
2828
$routeMiddleware = $route->{'x-lg-middleware'} ?? null;
2929
$routeWithoutMiddleware = $route->{'x-lg-without-middleware'} ?? null;
3030
if ($handler) {
31-
[$handler, $controllerNamespace] = $this->getControllerInfoFromHandler($handler);
32-
33-
$controllerNamespaces[] = $controllerNamespace;
31+
$handler = $this->getControllerInfoFromHandler($controllerNamespaces, $handler);
3432

3533
$routesStrings .= "Route::{$method}('{$this->trimPath($path)}', {$handler})";
3634
$routesStrings .= $routeName ? "->name('{$routeName}')": "";
@@ -58,13 +56,45 @@ public function generate(SpecObjectInterface $specObject): void
5856
);
5957
}
6058

61-
private function getControllerInfoFromHandler(string $handler): array
59+
private function getControllerInfoFromHandler(array &$controllerNamespaces, string $handler): string
6260
{
6361
$parsedRouteHandler = $this->routeHandlerParser->parse($handler);
6462
$class = $parsedRouteHandler->class . '::class';
6563
$method = $parsedRouteHandler->method;
6664

67-
return [$method ? "[$class, '$method']" : "$class", "{$parsedRouteHandler->namespace}\\{$parsedRouteHandler->class}"];
65+
if (isset($controllerNamespaces[$parsedRouteHandler->class])) {
66+
if (!isset($controllerNamespaces[$parsedRouteHandler->class]['items'][$parsedRouteHandler->namespace])) {
67+
$count = ++$controllerNamespaces[$parsedRouteHandler->class]['count'];
68+
$class = "{$parsedRouteHandler->class}{$count}";
69+
$controllerNamespaces[$parsedRouteHandler->class] = [
70+
'items' => array_merge(
71+
$controllerNamespaces[$parsedRouteHandler->class]['items'],
72+
[
73+
$parsedRouteHandler->namespace => [
74+
'class_name' => $class,
75+
'namespace' => "{$parsedRouteHandler->namespace}\\{$parsedRouteHandler->class} as {$class}",
76+
],
77+
]
78+
),
79+
'count' => $count,
80+
];
81+
$class = $class . '::class';
82+
} else {
83+
$class = $controllerNamespaces[$parsedRouteHandler->class]['items'][$parsedRouteHandler->namespace]['class_name'] . '::class';
84+
}
85+
} else {
86+
$controllerNamespaces[$parsedRouteHandler->class] = [
87+
'items' => [
88+
$parsedRouteHandler->namespace => [
89+
'class_name' => $parsedRouteHandler->class,
90+
'namespace' => "{$parsedRouteHandler->namespace}\\{$parsedRouteHandler->class}",
91+
],
92+
],
93+
'count' => 1,
94+
];
95+
}
96+
97+
return $method ? "[$class, '$method']" : "$class";
6898
}
6999

70100
private function formatMiddleware(string $middleware): string
@@ -80,9 +110,15 @@ private function formatMiddleware(string $middleware): string
80110

81111
private function formatControllerNamespaces(array $controllerNamespaces): string
82112
{
83-
$controllerNamespaces = array_unique($controllerNamespaces);
84-
sort($controllerNamespaces);
113+
$namespaces = [];
114+
foreach ($controllerNamespaces as $controllerNamespacesByClassName) {
115+
foreach ($controllerNamespacesByClassName['items'] as $controllerNamespace) {
116+
$namespaces[] = $controllerNamespace['namespace'];
117+
}
118+
}
119+
120+
sort($namespaces);
85121

86-
return implode("\n", array_map(fn (string $controllerNamespace) => "use {$controllerNamespace};", $controllerNamespaces));
122+
return implode("\n", array_map(fn (string $namespace) => "use {$namespace};", $namespaces));
87123
}
88124
}

0 commit comments

Comments
 (0)