request = $requestStack->getCurrentRequest(); } } /** * Получение класса Dto * * @return DtoServiceInterface|null */ public function getClass(): ?DtoServiceInterface { if ($this->request) { try { $normalizer = new ObjectNormalizer( null, new CamelCaseToSnakeCaseNameConverter(), null, new ReflectionExtractor() ); $serializer = new Serializer( [$normalizer, new DateTimeNormalizer()], [new JsonEncoder()] ); return $serializer->deserialize($this->request->getContent(), static::class, 'json'); } catch (\Exception $exception) { return null; } } return null; } public function toArray(): ?array { try { $oNormalizer = new ObjectNormalizer( null, new CamelCaseToSnakeCaseNameConverter(), null, new ReflectionExtractor() ); $oSerializer = new Serializer([$oNormalizer], [new JsonEncoder()]); $sData = $oSerializer->serialize($this->getClass(), 'json'); return json_decode($sData, true, 512, JSON_THROW_ON_ERROR); } catch (\Exception $oException) { return null; } } /** * Валидация Dto * * @param ResponseServiceInterface $response * * @return bool */ public function validate(ResponseServiceInterface $response): bool { $apiResponse = $response->getResponse(); $bValid = true; if ($classObj = $this->getClass()) { $aErrors = $this->validator->validate($classObj); if (count($aErrors) > 0) { foreach ($aErrors as $error) { $apiResponse->addError($error->getMessage()); } $bValid = false; } } else { $apiResponse->addError("Данные не получены"); $bValid = false; } return $bValid; } }