0

我正在尝试按照 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 错误或“超过 30 秒的最大执行时间”我不知道这里有什么问题。还有其他方法可以序列化 PagerFanta 对象吗?

最好的祝福!

4

1 回答 1

0

答案很简单 - 而不是使用我刚刚使用的循环引用处理程序 $normalizer->setIgnoredAttributes(array(...related fields of 2nd level objects...))

于 2018-05-13T15:33:40.373 回答