2015-02-08 51 views
1

我使用FOSRestBundle和JMSSerializerBundle为我的网站设置REST服务。“序列化数据不支持资源。”当使用FOSRestBundle和Paginator

我在一个返回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); 
    } 
} 

任何帮助,将不胜感激!

谢谢。

回答

0

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

已经在这里回答,请使用搜索!

+0

感谢您的回答。那是我第一次做的。但是toArray()方法不存在! – Anthony 2015-02-08 12:06:02

+0

我得到的错误:'尝试调用方法“toArray”类“Doctrine \ ORM \ Tools \ Pagination \ Paginator' – Anthony 2015-02-08 12:12:29

+0

对不起,我没有测试它。 paginator as $ entry){ $ result [] = $ entry; } return $ result – ToBe 2015-02-08 12:18:13

1

您可以使用iterator_to_array您分页程序的迭代器转换成数组:

return iterator_to_array($theAds->getIterator()); 
相关问题