Список объектов, не преобразующих в JSON, вместо этого я получаю массив пустых объектов - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующий код:

public function adminListAction(Request $request)
    {
        if (!$this->isGranted('ROLE_ADMIN')) {
            return new JsonResponse("Not granted");
        }

        $page = $request->query->get('page', 1);

        $criteria = new DocumentaryCriteria();
        $criteria->setStatus(DocumentaryStatus::PUBLISH);
        $criteria->setSort([
            DocumentaryOrderBy::CREATED_AT => Order::DESC
        ]);

        $qb = $this->documentaryService->getDocumentariesByCriteriaQueryBuilder($criteria);

        $adapter = new DoctrineORMAdapter($qb, false);
        $pagerfanta = new Pagerfanta($adapter);
        $pagerfanta->setMaxPerPage(12);
        $pagerfanta->setCurrentPage($page);

        $items = (array) $pagerfanta->getCurrentPageResults();

        $data = [
            'items'             => $items,
            'count_results'     => $pagerfanta->getNbResults(),
            'current_page'      => $pagerfanta->getCurrentPage(),
            'number_of_pages'   => $pagerfanta->getNbPages(),
            'next'              => ($pagerfanta->hasNextPage()) ? $pagerfanta->getNextPage() : null,
            'prev'              => ($pagerfanta->hasPreviousPage()) ? $pagerfanta->getPreviousPage() : null,
            'paginate'          => $pagerfanta->haveToPaginate(),
        ];

        return new JsonResponse($data);
    }

, который возвращает следующее, обратите внимание на массив пустых объектов

{"items": [{}, {},{}, {}, {}, {}, {}, {}, {}], «count_results»: 9, «current_page»: 1, «number_of_pages»: 1, «next»: null, «prev»:null, "paginate": false}

Я знаю, что их свойства не равны null, выполняя это:

foreach ($items as $item) {
    echo $item->getTitle();
}

// возвращает 'Documentary 1'

1 Ответ

0 голосов
/ 10 июля 2019

Скорее всего, проблема в том, что ваш $item объект не поддерживает сериализацию json.

Попробуйте реализовать интерфейс JsonSerializable в этом классе (https://www.php.net/manual/en/class.jsonserializable.php) и добавить метод в свой класс item следующим образом:

public function jsonSerialize() { return [ 'title' => $this->getTitle(), 'foo' => $this->bar(), ]; }

...