使用 ManyToMany 关系序列化学说对象
Serializing doctrine object with ManyToMany relation
我正在尝试按照 symfony 官方文档将对象序列化为 json。
我有 Pagerfanta 对象(就像在演示应用程序中一样从存储库中获取它)
public function findOneIncRel(int $page = 1): Pagerfanta
{
$query = $this->createQueryBuilder('b')
->select('b, m, a')
->leftJoin('b.marks', 'm')
->leftJoin('b.authors', 'a')
->getQuery();
return $this->createPaginator($query, $page);
}
private function createPaginator(Query $query, int $page): Pagerfanta
{
$paginator = new Pagerfanta(new DoctrineORMAdapter($query));
$paginator->setMaxPerPage(10);
$paginator->setCurrentPage($page);
return $paginator;
}
我需要将结果转换为 JSON。
我试过这个:
$books = $bookRepository->findAllIncRel(1);
$encoder = array(new JsonEncoder());
$normalizers = array(new ObjectNormalizer());
$normalizers[0]->setCircularReferenceLimit(1);
$normalizers[0]->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
$serializer = new Serializer($normalizers, $encoder);
return new JsonResponse($serializer->serialize($books->getCurrentPageResults(), 'json'));
Book实例的结构是这样的:
-id: ...
-marks: PersistentCollection ...
-authors: PersistentCollection ...
...
但我得到的只是无法捕获的 500 错误或 "Maximum execution time of 30 seconds exceeded"
我不知道这里有什么问题。有没有其他方法可以序列化 PagerFanta 对象?
此致!
答案非常简单 - 我没有使用循环引用处理程序,而是使用了 $normalizer->setIgnoredAttributes(array(...related fields of 2nd level objects...))
我正在尝试按照 symfony 官方文档将对象序列化为 json。 我有 Pagerfanta 对象(就像在演示应用程序中一样从存储库中获取它)
public function findOneIncRel(int $page = 1): Pagerfanta
{
$query = $this->createQueryBuilder('b')
->select('b, m, a')
->leftJoin('b.marks', 'm')
->leftJoin('b.authors', 'a')
->getQuery();
return $this->createPaginator($query, $page);
}
private function createPaginator(Query $query, int $page): Pagerfanta
{
$paginator = new Pagerfanta(new DoctrineORMAdapter($query));
$paginator->setMaxPerPage(10);
$paginator->setCurrentPage($page);
return $paginator;
}
我需要将结果转换为 JSON。
我试过这个:
$books = $bookRepository->findAllIncRel(1);
$encoder = array(new JsonEncoder());
$normalizers = array(new ObjectNormalizer());
$normalizers[0]->setCircularReferenceLimit(1);
$normalizers[0]->setCircularReferenceHandler(function ($object) {
return $object->getId();
});
$serializer = new Serializer($normalizers, $encoder);
return new JsonResponse($serializer->serialize($books->getCurrentPageResults(), 'json'));
Book实例的结构是这样的:
-id: ...
-marks: PersistentCollection ...
-authors: PersistentCollection ...
...
但我得到的只是无法捕获的 500 错误或 "Maximum execution time of 30 seconds exceeded" 我不知道这里有什么问题。有没有其他方法可以序列化 PagerFanta 对象?
此致!
答案非常简单 - 我没有使用循环引用处理程序,而是使用了 $normalizer->setIgnoredAttributes(array(...related fields of 2nd level objects...))