From 7703de50296ee97466702c25598ff2132efcfcd7 Mon Sep 17 00:00:00 2001 From: goktugoner23 Date: Thu, 16 Jan 2025 02:34:22 +0300 Subject: [PATCH] fix: update DTO classes for Laravel Data compatibility --- camel/Extraction/ExtractedEndpointData.php | 40 ++++++++++++++-------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/camel/Extraction/ExtractedEndpointData.php b/camel/Extraction/ExtractedEndpointData.php index 3f6b295a..03d9af2b 100644 --- a/camel/Extraction/ExtractedEndpointData.php +++ b/camel/Extraction/ExtractedEndpointData.php @@ -82,9 +82,9 @@ class ExtractedEndpointData extends BaseDTO public function __construct(array $parameters = []) { - $parameters['metadata'] = $parameters['metadata'] ?? new Metadata([]); - $parameters['responses'] = $parameters['responses'] ?? new ResponseCollection([]); - + $this->metadata = new Metadata([]); + $this->responses = new ResponseCollection([]); + parent::__construct($parameters); $defaultNormalizer = fn() => UrlParamsNormalizer::normalizeParameterNamesInRouteUri($this->route, $this->method); @@ -95,19 +95,29 @@ public function __construct(array $parameters = []) }; } - public static function fromRoute(Route $route, array $extras = []): self + public static function fromRoute(Route $route): static { - $httpMethods = self::getMethods($route); - $uri = $route->uri(); - - [$controllerName, $methodName] = u::getRouteClassAndMethodNames($route); - $controller = new ReflectionClass($controllerName); - $method = u::getReflectedRouteMethod([$controllerName, $methodName]); - - $data = compact('httpMethods', 'uri', 'controller', 'method', 'route'); - $data = array_merge($data, $extras); - - return new ExtractedEndpointData($data); + $controller = $route->getController(); + $class = new ReflectionClass($controller); + $method = $class->getMethod($route->getActionMethod()); + + return new static([ + 'httpMethods' => $route->methods(), + 'uri' => $route->uri(), + 'controller' => $class, + 'method' => $method, + 'route' => $route, + 'metadata' => new Metadata([]), + 'responses' => new ResponseCollection([]), + 'headers' => [], + 'urlParameters' => [], + 'cleanUrlParameters' => [], + 'queryParameters' => [], + 'cleanQueryParameters' => [], + 'bodyParameters' => [], + 'cleanBodyParameters' => [], + 'fileParameters' => [] + ]); } /**