From f0683ef40d3c935550f306ec9e3fcb3ba36ca003 Mon Sep 17 00:00:00 2001 From: Sipachev Igor Date: Thu, 12 Aug 2021 19:05:50 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20entity=20transformer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DependencyInjection/RequestExtension.php | 5 ++++- src/EventListener/RequestListener.php | 9 ++++++++- src/RequestBundle.php | 2 +- src/Resources/config/services.yaml | 4 +++- src/Service/Transformer/EntityTransformer.php | 4 ++-- src/Service/Transformer/ServiceResolver.php | 4 +++- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/DependencyInjection/RequestExtension.php b/src/DependencyInjection/RequestExtension.php index 6992d79..f58ff88 100644 --- a/src/DependencyInjection/RequestExtension.php +++ b/src/DependencyInjection/RequestExtension.php @@ -2,6 +2,7 @@ namespace Rinsvent\RequestBundle\DependencyInjection; +use Rinsvent\RequestBundle\Service\Transformer\AbstractTransformer; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Extension\Extension; @@ -13,5 +14,7 @@ class RequestExtension extends Extension { $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yaml'); + + // $container->findTaggedServiceIds(AbstractTransformer::class); } -} \ No newline at end of file +} diff --git a/src/EventListener/RequestListener.php b/src/EventListener/RequestListener.php index 36257fd..da7032e 100644 --- a/src/EventListener/RequestListener.php +++ b/src/EventListener/RequestListener.php @@ -3,10 +3,12 @@ namespace Rinsvent\RequestBundle\EventListener; use Rinsvent\Data2DTO\Data2DtoConverter; +use Rinsvent\Data2DTO\Resolver\TransformerResolverStorage; use Rinsvent\RequestBundle\Annotation\RequestDTO; use Rinsvent\RequestBundle\DTO\Error; use Rinsvent\RequestBundle\DTO\ErrorCollection; use Rinsvent\AttributeExtractor\MethodExtractor; +use Rinsvent\RequestBundle\Service\Transformer\ServiceResolver; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\RequestEvent; @@ -15,10 +17,15 @@ use Symfony\Component\Validator\Validation; // todo базовая заготовка. Требуется рефакторинг class RequestListener { - public const REQUEST_DATA = 'request_data'; + public function __construct( + private ServiceResolver $serviceResolver + ) {} public function onKernelRequest(RequestEvent $event) { + $storage = TransformerResolverStorage::getInstance(); + $storage->add(ServiceResolver::TYPE, $this->serviceResolver); + $request = $event->getRequest(); $controller = $request->get('_controller'); if (is_string($controller)) { diff --git a/src/RequestBundle.php b/src/RequestBundle.php index 80f88e9..8c30d17 100644 --- a/src/RequestBundle.php +++ b/src/RequestBundle.php @@ -7,4 +7,4 @@ use Symfony\Component\HttpKernel\Bundle\Bundle; class RequestBundle extends Bundle { -} \ No newline at end of file +} diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index 3253fae..0a25b3e 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -5,10 +5,12 @@ services: autowire: true Rinsvent\RequestBundle\EventListener\RequestListener: - autowire: true tags: - { name: kernel.event_listener, event: kernel.request } + Rinsvent\RequestBundle\Service\Transformer\: + resource: '../../../src/Service/Transformer' + Rinsvent\RequestBundle\Service\Transformer\ServiceResolver: bind: $transformerLocator: !tagged_locator { tag: 'rinsvent.transformer', index_by: 'key', default_index_method: 'getLocatorKey' } diff --git a/src/Service/Transformer/EntityTransformer.php b/src/Service/Transformer/EntityTransformer.php index f2e1e0d..78fb4c8 100644 --- a/src/Service/Transformer/EntityTransformer.php +++ b/src/Service/Transformer/EntityTransformer.php @@ -17,10 +17,10 @@ class EntityTransformer extends AbstractTransformer */ public function transform(&$data, Meta $meta): void { - if (!is_int($data)) { + if (!is_string($data)) { return; } $repository = $this->em->getRepository($meta->class); - $data = $repository->find((int)$data); + $data = $repository->find((string)$data); } } diff --git a/src/Service/Transformer/ServiceResolver.php b/src/Service/Transformer/ServiceResolver.php index ca906a4..7dcdcb2 100644 --- a/src/Service/Transformer/ServiceResolver.php +++ b/src/Service/Transformer/ServiceResolver.php @@ -9,6 +9,8 @@ use Symfony\Component\DependencyInjection\ServiceLocator; class ServiceResolver implements TransformerResolverInterface { + public const TYPE = 'service'; + public function __construct( private ServiceLocator $transformerLocator ) {} @@ -18,4 +20,4 @@ class ServiceResolver implements TransformerResolverInterface $transformerClass = $meta::class . 'Transformer'; return $this->transformerLocator->get($transformerClass); } -} \ No newline at end of file +}