Php &引用;序列化数据中不支持资源。”;使用FOSRestBundle和Paginator时

Php &引用;序列化数据中不支持资源。”;使用FOSRestBundle和Paginator时,php,symfony,fosuserbundle,jmsserializerbundle,Php,Symfony,Fosuserbundle,Jmsserializerbundle,我正在使用FOSRestBundle和JMSSerializerBundle为我的网站设置REST服务 我在实体存储库上创建了一个自定义方法,该方法返回一个Paginator对象。当我在普通网站上使用该方法时,该方法非常有效,但当我想将该方法用于REST路由时,会抛出此错误(XML或JSON输出会抛出相同的错误): “序列化数据中不支持资源。” 我真的不知道在哪里搜索,因为错误对我来说不是很明确 以下是我的AdsRestController.php: <?php namespace My

我正在使用FOSRestBundle和JMSSerializerBundle为我的网站设置REST服务

我在实体存储库上创建了一个自定义方法,该方法返回一个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;
    }
}

在rest控制器中使用getAds()->toArray()手动将结果转换为数组


已经回答这里,使用搜索

查看Paginator对象上可用的->getIterator()方法。
请参见

您可以使用
迭代器到数组
将分页器的迭代器转换为数组:

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

如果使用
迭代器\u to \u array
,它将结果数组转换为单个对象。最好将它们提取到数组中,然后序列化它

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

        $res = $this->get('jms_serializer')->serialize($var, 'json');
        return new JsonResponse(json_decode($res));

谢谢你的回答。那是我首先做的。但是toArray()方法不存在!我收到错误:“试图调用类“条令\ORM\Tools\Pagination\Paginator”上的方法“toArray”。很抱歉,我没有对其进行测试。在分页对象上迭代手动生成数组。foreach($Paginator as$entry){$result[]=$entry;}返回$resultYes当然有效。但是没有其他非脏的解决方案吗?再次感谢您的回复。
 $var = [];
        foreach ($records as $rec){
            array_push($var, $rec);
        }

        $res = $this->get('jms_serializer')->serialize($var, 'json');
        return new JsonResponse(json_decode($res));