Symfony 3 - 声明并使用除控制器之外的序列化程序

问题描述 投票:1回答:2

我想在我的控制器以外的地方使用Symfony序列化服务。根据doc',它应该在构造函数中声明。我使用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');

但我无法在构造函数中正确声明它以便以后使用它。

谁能帮我 ?谢谢

php symfony serialization serializer
2个回答
1
投票
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
投票

根据Symfony documentation,您可以创建一个序列化程序对象来序列化代码的任何部分。没有必要将其作为服务注入。

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);
© www.soinside.com 2019 - 2024. All rights reserved.