我想在我的控制器以外的地方使用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');
但我无法在构造函数中正确声明它以便以后使用它。
谁能帮我 ?谢谢
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');
根据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);