Symfony 3 - объявляйте и используйте сериализатор, отличный от контроллера - PullRequest
1 голос
/ 16 апреля 2019

Я хотел бы использовать службу сериализации Symfony где-то еще, кроме моего контроллера.Согласно документу, это должно быть объявлено в конструкторе.Я провел тест с EntityManagerInterface.

У меня есть это:

use Doctrine\ORM\EntityManager;

//...

public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;

    }

//...

$nb = $this->em->getRepository('PagesBundle:UserCas')->getIfUserCas($mail);

Я хотел бы сделать то же самое с сериализатором Symfony, используя что-то вроде:

$user = $this->get('serializer')->serialize($user, 'json');

Но я не могу объявить это должным образом в конструкторе, чтобы использовать его позже.

Кто-нибудь может мне помочь?Спасибо

Ответы [ 2 ]

1 голос
/ 16 апреля 2019
use Doctrine\ORM\EntityManager;
use Symfony\Component\Serializer\SerializerInterface;

//...
private $serializer;

public function __construct(
         EntityManagerInterface $em,
         SerializerInterface $serializer)
    {
        $this->em = $em;
        $this->serializer = $serializer;
    }

//...

$nb = $this->em->getRepository('PagesBundle:UserCas')->getIfUserCas($mail);
$this->serializer->serialize($user, 'json');
1 голос
/ 16 апреля 2019

Согласно документации Symfony вы можете создать объект сериализатора для сериализации чего угодно в любой части вашего кода.Нет необходимости вводить его как услугу.

use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;

$encoders = [new XmlEncoder(), new JsonEncoder()]; 
$normalizers = [new ObjectNormalizer()];

$serializer = new Serializer($normalizers, $encoders);
...