2015-02-08 52 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()); 
相關問題