代码之家  ›  专栏  ›  技术社区  ›  RonnyKnoxville

JMS序列化程序不将格式应用于新创建的对象

  •  0
  • RonnyKnoxville  · 技术社区  · 6 年前

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

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

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

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

    即使我使用存储库获取一个新的课程对象,如果它是我刚创建的同一个对象,那么它仍然没有使用格式进行序列化。可能是因为到那时它已经加载到内存中了?

    如果我使用存储库从数据库中获取不同的过程,那么将应用序列化格式。

    我希望在返回课程对象时应用格式设置,不管它是否刚刚创建。有什么想法吗?

    课程类别

    /**
     * @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 回复  |  直到 6 年前
        1
  •  0
  •   RonnyKnoxville    6 年前

    结果表明,您不应该在JMS序列化程序中使用Carbon对象。

    只要我在course对象而不是carbon对象上设置datetime对象,它就可以正常工作。

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