2017-02-13 5 views
2

У меня возникли проблемы с настройкой JMS Serializer и FOSRestBundle, чтобы сериализовать этот метод пользовательского репозитория.JMS Serializer не работает с методом пользовательских репозиториев с FOSRest

Если я использую $schedules = $em->getRepository('RadioBundle:Schedule')->findAll();, он отлично работает, но когда я пытаюсь выполнить свой собственный метод, ни одно из полей не будет исключено.

Может кто-нибудь помочь мне разобраться, что случилось?

Контроллер:

use RadioBundle\Entity\Schedule; 
use Symfony\Component\HttpFoundation\Request; 
use FOS\RestBundle\Controller\Annotations\View; 


class ScheduleController extends BaseController 
{ 
    /** 
    * @param $date 
    * @return \Symfony\Component\HttpFoundation\Response 
    * @View(serializerGroups={"schedule"}) 
    */ 
    public function getSchedulesScheduleAction($date) 
    { 
     $em = $this->getDoctrine()->getManager(); 
     list($startDate, $endDate) = $this->get('radio.utils.date_and_time')->findWeekRange($date); 
     $schedules = $em->getRepository('RadioBundle:Schedule')->findByRange($startDate, $endDate); 

     $view = $this->view(
      [ 
       'schedules' => $schedules, 
      ], 
      200 
     ); 

     return $this->handleView($view); 
    } 
} 

Repository Метод:

class ScheduleRepository extends EntityRepository 
{ 
    /** 
    * @param \DateTime $startDate 
    * @param \DateTime $endDate 
    * @return array 
    */ 
    public function findByRange(\DateTime $startDate, \DateTime $endDate) 
    { 
     $em = $this->getEntityManager(); 
     $qb = $em->createQueryBuilder(); 
     $qb->select('s') 
      ->from('RadioBundle:Schedule', 's') 
      ->leftJoin('s.radioShow', 'rs') 
      ->add(
       'where', 
       $qb->expr()->between(
        's.startTime', 
        ':from', 
        ':to' 
       ) 
      ) 
      ->orderBy('s.startTime', 'asc') 
      ->andWhere('rs.isActive = true') 
      ->setParameters(['from' => $startDate, 'to' => $endDate]); 

     return $qb->getQuery()->getArrayResult(); 
    } 
} 
+0

Сериализация для работы нужны реальные объекты, а не массивы, проверьте ответ @martin, который является решением вашей проблемы. – malcolm

ответ

5

Если возвращать результаты из метода с getArrayResult() он генерирует вложенные массивы вместо объектов сущностей.

JMSSerializer должен знать, какие классы вы сериализуете для загрузки правильных метаданных. Таким образом, вы должны использовать вместо этого getResult().

+0

Я не знаю, как долго это заняло бы меня на тренировках, спасибо огромное! – Sarcoma

Смежные вопросы