Fully working version of working with products

This commit is contained in:
Tim
2021-10-04 00:37:36 +02:00
parent 44bd43128b
commit 22c4101729
6 changed files with 305 additions and 51 deletions

View File

@ -0,0 +1,47 @@
<?php
namespace Ardent\GrocyApi\Objects;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
class ObjectTransformer
{
public function SerializeObjectToJsonResponse($object, $context = []): JsonResponse
{
$defaultContext = [
AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object, $format, $context) {
return $object->getId();
},
];
$serializer = new Serializer([
new ObjectNormalizer(),
], [new JsonEncoder()]);
$json = $serializer->serialize($object, 'json', $context);
return new JsonResponse($json, 200, [], true);
}
public static function denormalize($object, string $name): AbstractApiObject
{
return (new ObjectNormalizer())->denormalize($object, sprintf('%s\\%sObject', __NAMESPACE__, ucfirst($name)));
}
public static function normalize(AbstractApiObject $object): array
{
$classMetaDataFactory = new ClassMetadataFactory(new AnnotationLoader());
$serializer = new Serializer([
new ObjectNormalizer($classMetaDataFactory, new CamelCaseToSnakeCaseNameConverter()),
]);
return $serializer->normalize($object);
}
}