JMS 序列化程序不会将格式应用于新创建的对象
JMS Serializer does not apply formatting to newly created objects
从 API 获取对象时,我收到了正确序列化的 Course 对象。
"startDate": "2018-05-21",
但是当我创建一个新对象并尝试 return 它时,没有应用格式。
"startDate": "2019-02-01T02:37:02+00:00",
即使我使用存储库获取新的 Course 对象,如果它与我刚刚创建的对象相同,那么它仍然没有使用格式进行序列化。可能是因为那时它已经加载到内存中了?
如果我使用存储库从数据库中获取不同的课程,则会应用序列化格式。
我希望在 return 课程对象时应用格式,无论它是否刚刚创建。有什么想法吗?
课程class
/**
* @ORM\Entity(repositoryClass="App\Repository\CourseRepository")
*
* @HasLifecycleCallbacks
*/
class Course
{
/**
* @var string
*
* @ORM\Column(type="date")
*
* @Assert\Date
* @Assert\NotNull
*
* @JMS\Type("DateTime<'Y-m-d'>")
* @JMS\Groups({"courses-list", "course-details"})
*/
private $startDate;
/**
* @return string
*/
public function getStartDate(): string
{
return $this->startDate;
}
}
课程API控制器Class
public function getCourse($id)
{
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('App:Course');
$course = $repo->find($id);
if(!$course) {
throw new NotFoundHttpException('Course not found', null, 2001);
}
return $course;
}
public function addCourse(Request $request) {
$course = new Course();
$course->setStartDate($startDate);
$validator = $this->get('validator');
$em->persist($course);
$em->flush();
return $course;
}
事实证明,您不应该将 Carbon 对象与 JMS 序列化程序一起使用。
只要我在 Course 对象上设置 DateTime 对象而不是 Carbon 对象,它就可以正常工作。
奇怪的行为,因为它们都实现了 DateTimeInterface。
从 API 获取对象时,我收到了正确序列化的 Course 对象。
"startDate": "2018-05-21",
但是当我创建一个新对象并尝试 return 它时,没有应用格式。
"startDate": "2019-02-01T02:37:02+00:00",
即使我使用存储库获取新的 Course 对象,如果它与我刚刚创建的对象相同,那么它仍然没有使用格式进行序列化。可能是因为那时它已经加载到内存中了?
如果我使用存储库从数据库中获取不同的课程,则会应用序列化格式。
我希望在 return 课程对象时应用格式,无论它是否刚刚创建。有什么想法吗?
课程class
/**
* @ORM\Entity(repositoryClass="App\Repository\CourseRepository")
*
* @HasLifecycleCallbacks
*/
class Course
{
/**
* @var string
*
* @ORM\Column(type="date")
*
* @Assert\Date
* @Assert\NotNull
*
* @JMS\Type("DateTime<'Y-m-d'>")
* @JMS\Groups({"courses-list", "course-details"})
*/
private $startDate;
/**
* @return string
*/
public function getStartDate(): string
{
return $this->startDate;
}
}
课程API控制器Class
public function getCourse($id)
{
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('App:Course');
$course = $repo->find($id);
if(!$course) {
throw new NotFoundHttpException('Course not found', null, 2001);
}
return $course;
}
public function addCourse(Request $request) {
$course = new Course();
$course->setStartDate($startDate);
$validator = $this->get('validator');
$em->persist($course);
$em->flush();
return $course;
}
事实证明,您不应该将 Carbon 对象与 JMS 序列化程序一起使用。
只要我在 Course 对象上设置 DateTime 对象而不是 Carbon 对象,它就可以正常工作。
奇怪的行为,因为它们都实现了 DateTimeInterface。