diff --git a/src/Attribute/ResponseSchema.php b/src/Attribute/ResponseSchema.php new file mode 100644 index 0000000..d9d6d3b --- /dev/null +++ b/src/Attribute/ResponseSchema.php @@ -0,0 +1,12 @@ +convert($data); + $schema = $this->grabSchema($event); + $data = $dto2dataConverter->convert($data, $schema); $response->setData($data); } + + private function grabSchema(ResponseEvent $event): string + { + $request = $event->getRequest(); + $controller = $request->get('_controller'); + if (is_string($controller)) { + $controller = explode('::', $controller); + } + if (is_callable($controller)) { + if (is_object($controller[0])) { + $controller[0] = get_class($controller[0]); + } + } + if (!is_array($controller) || !count($controller) === 2) { + throw new \InvalidArgumentException('Response schema not found'); + } + $methodExtractor = new MethodExtractor($controller[0], $controller[1]); + + /** @var ResponseSchema $responseSchema */ + while ($responseSchema = $methodExtractor->fetch(ResponseSchema::class)) { + return $responseSchema->schemaClass; + } + throw new \InvalidArgumentException('Response schema not found'); + } }