JMS Serializer не применяет форматирование к вновь созданным объектам - PullRequest
0 голосов
/ 23 мая 2018

При получении объекта из API я получаю правильно сериализованный объект Course.

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

Но когда я создаю новый объект и пытаюсь его вернуть, форматирование не применяется.

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

Даже если я использую репозиторий, чтобы получить новый объект 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 Controller 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;
}

1 Ответ

0 голосов
/ 23 мая 2018

Оказывается, что вы не должны использовать объекты Carbon с JMS Serializer.

Как только я установил объекты DateTime для объекта Course вместо объектов Carbon, все заработало.

Странноповедение, учитывая, что они оба реализуют DateTimeInterface.

...