JMS 序列化程序无法使用 FOSRest 处理自定义存储库方法
JMS Serializer not working on custom repository method with FOSRest
我在设置 JMS Serializer 和 FOSRestBundle 以序列化此自定义存储库方法时遇到问题。
如果我使用 $schedules = $em->getRepository('RadioBundle:Schedule')->findAll();
它工作正常,但是当我尝试我的自定义方法时 none 字段被排除在外。
有人可以帮我解决问题吗?
控制器:
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);
}
}
存储库方法:
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();
}
}
如果您 return 使用 getArrayResult()
从您的方法中得到结果,它会生成嵌套数组而不是实体对象。
JMSSerializer 需要知道类 您正在序列化什么以加载正确的元数据。所以你应该改用 getResult()
。
我在设置 JMS Serializer 和 FOSRestBundle 以序列化此自定义存储库方法时遇到问题。
如果我使用 $schedules = $em->getRepository('RadioBundle:Schedule')->findAll();
它工作正常,但是当我尝试我的自定义方法时 none 字段被排除在外。
有人可以帮我解决问题吗?
控制器:
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);
}
}
存储库方法:
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();
}
}
如果您 return 使用 getArrayResult()
从您的方法中得到结果,它会生成嵌套数组而不是实体对象。
JMSSerializer 需要知道类 您正在序列化什么以加载正确的元数据。所以你应该改用 getResult()
。