& quot; Ресурсы не поддерживаются в сериализованных данных. & quot; при использовании FOSRestBundle и Paginator

Я настраиваю службу REST для моего сайта с помощью FOSRestBundle и JMSSerializerBundle.

Я создал собственный метод для хранилища сущностей, который возвращает объект Paginator. Метод отлично работает, когда я использую его на обычном веб-сайте, но когда я хочу использовать метод с маршрутом REST, выдается эта ошибка (вывод XML или JSON выдает ту же ошибку):

«Ресурсы не поддерживаются в сериализованных данных».

Я действительно не знаю, где искать, так как ошибка не очень очевидна для меня.

Вот мой AdsRestController.php:

<?php

namespace MyProject\MainBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use FOS\RestBundle\Controller\Annotations\View;
use FOS\RestBundle\Controller\Annotations\Get;class AdsRestController extends Controller
{
/**
* @View
* @Get("/ads/list/all/{page}", requirements={"page" = "\id+"}, defaults={"page" = 1})
*/
public function getAdsListAllAction($page) {

$theAds = $this->getDoctrine()->getRepository('MyProjectMainBundle:Ads')->getAds($page);

return $theAds;
}
}

и мой AdsRepository.php:

<?php

namespace MyProject\MainBundle\Entity;

use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Tools\Pagination\Paginator;

class AdsRepository extends EntityRepository
{

public function getAds($page=1, $maxPerPage=10)
{
$query = $this->createQueryBuilder('a')
->orderBy('a.date', $order)
;

$query->getQuery();

$query
->setFirstResult(($page-1) * $maxPerPage)
->setMaxResults($maxPerPage)
;

return new Paginator($query, true);
}
}

Любая помощь будет высоко оценен !

Благодарю.

3

Решение

Ты можешь использовать iterator_to_array преобразовать итератор вашего пагинатора в массив:

return iterator_to_array($theAds->getIterator());
2

Другие решения

Преобразуйте результат вручную в массив, используя getAds () -> toArray () в вашем контроллере rest.

здесь уже ответили, воспользуйтесь поиском!

0

Проверьте метод -> getIterator (), доступный для объектов Paginator.
Увидеть https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Pagination/Paginator.php

0

Если вы используете iterator_to_array, он преобразует массив результатов в один объект. Лучше извлечь их в массив, а затем сериализовать.

 $var = [];
foreach ($records as $rec){
array_push($var, $rec);
}

$res = $this->get('jms_serializer')->serialize($var, 'json');
return new JsonResponse(json_decode($res));
0
По вопросам рекламы [email protected]