Sar*_*oma 0 symfony doctrine-orm fosrestbundle jmsserializerbundle
我正在尝试使用@Groups注释来序列化我的数据,但我只是收到一个空数组。
我试过@Serializer\Expose在我想显示的字段上使用,但随后它们随处可见而忽略了这些组。
从我读过的内容来看,我很确定我应该只需要使用@Groups注释,但我最终得到了这个(有两个计划实体):
{
"schedules": [
{},
{}
]
}
Run Code Online (Sandbox Code Playgroud)
它的工作方式似乎发生了变化,我找到了以前版本 FOSRestBundle 的示例,我只是无法将它们移植到新版本。
据我了解,您可以在序列化程序上下文中设置组并使用它来设置视图上下文,但我对此并不走运。
https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/UPGRADING-2.0.md
View::setSerializationContext 和 View::getSerializationContext 已被删除。将 View::setContext 和 View::getContext 与新的 Context 类一起使用。
前:
Run Code Online (Sandbox Code Playgroud)use JMS\Serializer\SerializationContext; $view = new View(); $context = new SerializationContext(); $view->setSerializationContext($context); $context = $view->getSerializationContext();后:
Run Code Online (Sandbox Code Playgroud)use FOS\RestBundle\Context\Context; $view = new View(); $context = new Context(); $view->setContext($context); $context = $view->getContext();
我花了很长时间来解决所有这些问题,并且非常感谢任何帮助为我指明正确方向的帮助。
除了下面我试图use FOS\RestBundle\Controller\Annotations as Rest; 和
@Rest\View(serializerGroups({"schedule"})注释与控制器上,它有同样的效果,因为我看到现在(即无)。
调度控制器
use FOS\RestBundle\Context\Context;
class ScheduleController extends BaseController
{
/**
* @param $date
* @return \Symfony\Component\HttpFoundation\Response
*/
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
);
$context = new Context();
$context->setGroups(["schedule"]);
$view->setContext($context);
return $this->handleView($view);
}
}
Run Code Online (Sandbox Code Playgroud)
调度实体
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use JMS\Serializer\Annotation as Serializer;
/**
* Schedule
*
* @ORM\Table(name="schedule")
* @ORM\Entity(repositoryClass="RadioBundle\Repository\ScheduleRepository")
* @Serializer\ExclusionPolicy("all")
*/
class Schedule
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime
* @Assert\NotBlank()
* @Serializer\Groups({"schedule"})
* @ORM\Column(name="start_time", type="datetime")
\ */
private $startTime;
/**
* @var \DateTime
* @Assert\NotBlank()
* @Serializer\Groups({"schedule"})
* @ORM\Column(name="end_time", type="datetime")
*/
private $endTime;
/**
* @Assert\NotBlank()
* @Serializer\Groups({"schedule"})
* @ORM\ManyToOne(targetEntity="RadioBundle\Entity\RadioShow", inversedBy="schedule")
*/
private $radioShow;
...
Run Code Online (Sandbox Code Playgroud)
应用程序/config.yml
fos_rest:
param_fetcher_listener: true
body_listener: true
format_listener: true
view:
view_response_listener: 'force'
routing_loader:
default_format: json
jms_serializer:
metadata:
auto_detection: true
Run Code Online (Sandbox Code Playgroud)
在实体上使用 ExclusionPolicy("all") 时,您需要向组公开该属性。
例如
/**
* @var \DateTime
* @Assert\NotBlank()
* @Serializer\Groups({"schedule"})
* @Serializer\Expose()
* @ORM\Column(name="start_time", type="datetime")
*/
private $startTime;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |