From 14746a88bccc515870c6a235a43cfcefa4356f16 Mon Sep 17 00:00:00 2001 From: Rinsvent Date: Wed, 28 Jul 2021 23:07:43 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B?= =?UTF-8?q?=20=D1=81=20=D0=B0=D1=82=D1=80=D0=B8=D0=B1=D1=83=D1=82=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/EventListener/RequestListener.php | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/EventListener/RequestListener.php b/src/EventListener/RequestListener.php index da15a33..5ef6a32 100644 --- a/src/EventListener/RequestListener.php +++ b/src/EventListener/RequestListener.php @@ -3,12 +3,12 @@ namespace Rinsvent\RequestBundle\EventListener; use JMS\Serializer\SerializerBuilder; -use ReflectionMethod; use ReflectionObject; use Rinsvent\RequestBundle\Annotation\RequestDTO; use Rinsvent\RequestBundle\Annotation\HeaderKey; use Rinsvent\RequestBundle\DTO\Error; use Rinsvent\RequestBundle\DTO\ErrorCollection; +use Rinsvent\AttributeExtractor\MethodExtractor; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\RequestEvent; @@ -23,20 +23,16 @@ class RequestListener $controller = $request->get('_controller'); if (is_string($controller)) { $controller = explode('::', $controller); - $method = new ReflectionMethod($controller[0], $controller[1]); } if (is_callable($controller)){ - $method = new ReflectionMethod($controller[0], $controller[1]); - } - if (!isset($method)) { - return; + if (is_object($controller[0])) { + $controller[0] = get_class($controller[0]); + } + $methodExtractor = new MethodExtractor($controller[0], $controller[1]); } - $attributes = $method->getAttributes(RequestDTO::class); - $attribute = $attributes[0] ?? null; - if ($attribute) { - /** @var RequestDTO $requestDTO */ - $requestDTO = $attribute->newInstance(); + /** @var RequestDTO $requestDTO */ + if ($requestDTO = $methodExtractor->fetch(RequestDTO::class)) { $requestDTOInstance = $this->grabRequestDTO($requestDTO->className, $request->getContent(), $request->query->all(), $request->request->all(), $request->headers->all()); $errorCollection = $this->validate($requestDTOInstance);