Я работаю над API Platform.
В настоящее время я пытаюсь реализовать это
https://github.com/ivanakimov/hashids.php
, выполнив шаги в
https://github.com/api-platform/api-platform/issues/724#issuecomment-398812438
однако я не могу передать сущность в моем сериализаторе. Я могу получить только отдельные свойства, которые будут переданы.
Моя сущность:
class MyEntity
{
/**
* @var int
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string|null
*
* @ORM\Column(name="message", type="text", length=0, nullable=true)
*/
private $message;
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @param $id
*/
public function setId($id): void
{
$this->id = $id;
}
/**
* @return string|null
*/
public function getMessage(): ?string
{
return $this->message;
}
/**
* @param string|null $message
*/
public function setMessage(?string $message): void
{
$this->message = $message;
}
}
services.yaml:
'App\Serializer\CommonIdentifierNormalizer':
tags: [ name: serializer.normalizer ]
CommonIdentifierNormalizer:
namespace App\Serializer;
use Hashids\Hashids;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
use Doctrine\Common\Annotations\AnnotationReader;
use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
class CommonIdentifierNormalizer implements NormalizerInterface
{
private $normalizer;
public function __construct(ObjectNormalizer $objectNormalizer)
{
$this->normalizer = $objectNormalizer;
}
public function normalize($object, $format = null, array $context = array())
{
$hashId = new Hashids('', 7);
$data = $hashId->encodeHex($object->getId());
$object->setId($data);
return $this->normalizer->normalize($object);
}
public function supportsNormalization($data, $format = null)
{
return is_object($data);
}
}
Однако даже метод supportNormalization не работает, поскольку передаются только отдельные свойства.
Я хотел бы сделать это глобальным решением, где все свойства, отмеченные как идентификаторы, нормализованы, и мой запрос принимает хеш-коды вместо первичного ключа.
Вы можете помочь мне с этим?