From 9de88229311ba2576b8b3daffd7e5d1e46ad50c1 Mon Sep 17 00:00:00 2001 From: Rinsvent Date: Sat, 2 Apr 2022 11:16:27 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B8=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D0=B3=D1=80=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D1=83=D1=8E=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8E=20?= =?UTF-8?q?=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Attribute/ResponseSchema.php | 12 +++++++++++ src/EventListener/ResponseListener.php | 29 +++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/Attribute/ResponseSchema.php 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'); + } }