@@ -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