2017-02-13 5 views
2

Ich habe Probleme beim Einrichten JMS Serializer und FOSRestBundle, um diese benutzerdefinierte Repository-Methode zu serialisieren.JMS Serializer funktioniert nicht mit benutzerdefinierten Repository-Methode mit FOSRest

Wenn ich $schedules = $em->getRepository('RadioBundle:Schedule')->findAll(); verwende funktioniert es gut, aber wenn ich meine benutzerdefinierte Methode versuche, ist keines der Felder ausgeschlossen.

Kann mir jemand helfen herauszufinden, was los ist?

Controller:

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 Methode:

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

Serialisierung zu arbeiten brauchen echte Einheiten nicht Arrays, überprüfen Sie @ Martin Antwort, die die Lösung für Ihr Problem ist. – malcolm

Antwort

5

Wenn Sie die Ergebnisse Ihrer Methode mit getArrayResult() zurückkehren erzeugt es eine verschachtelte Arrays statt Entitätsobjekten.

JMSSerializer muss wissen, welche Klassen serialisiert werden, um die richtigen Metadaten zu laden. Sie sollten also wahrscheinlich getResult() verwenden.

+0

Ich weiß nicht, wie lange ich zum Training gebraucht hätte, vielen Dank! – Sarcoma

Verwandte Themen