JMS Serializer不会将格式应用于新创建的对象

时间:2018-05-23 08:48:30

标签: php symfony annotations jmsserializerbundle jms-serializer

从API获取对象时,我会收到一个正确序列化的课程对象。

"startDate": "2018-05-21",

但是当我创建一个新对象并尝试返回它时,不会应用格式化。

"startDate": "2019-02-01T02:37:02+00:00",

即使我使用存储库获取一个新的Course对象,如果它与我刚刚创建的对象相同,那么它仍然没有使用格式化序列化。也许是因为它已经被内存加载了?

如果我使用存储库从数据库获取不同的路线,则应用序列化格式。

我希望在返回Course对象时应用格式,无论它是否刚创建过。有什么想法吗?

课程类

/**
 * @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控制器类

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;
}

1 个答案:

答案 0 :(得分:0)

事实证明,不应将Carbon对象与JMS Serializer一起使用。

只要在Course对象上设置DateTime对象而不是Carbon对象,它就可以正常工作。

考虑到它们都实现了DateTimeInterface,这是一种奇怪的行为。