"序列化数据不支持资源。"使用FOSRestBundle和Paginator时

时间:2015-02-08 00:11:10

标签: php symfony fosuserbundle jmsserializerbundle

我正在使用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;
    }
}

和我的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);
    }
}

任何帮助都将受到高度赞赏!

感谢。

4 个答案:

答案 0 :(得分:2)

您可以使用 chart1 = new Chart(); chart1.DataSource = list; chart1.Series.Add("Speed").YValueMembers = "Speed"; chart1.Series["Speed"].ChartType = SeriesChartType.Bar; chart1.Series["Speed"].XValueType = ChartValueType.Double; chart1.Series["Speed"].YValueType = ChartValueType.Double; 将您的paginator的迭代器转换为数组:

iterator_to_array

答案 1 :(得分:0)

使用休息控制器中的getAds() - &gt; toArray()手动将结果转换为数组。

已在此处回答,请使用搜索!

答案 2 :(得分:0)

查看Paginator对象上可用的 - &gt; getIterator()方法。 见https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Pagination/Paginator.php

答案 3 :(得分: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));