При получении объекта из API я получаю правильно сериализованный объект Course.
"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;
}
И POST, и GET используют слушателей, которые должны быть настроены при установке пакетов. Ни один из них не был изменен.






Оказывается, вам не следует использовать объекты Carbon с JMS Serializer.
Как только я установил объекты DateTime в объекте Course вместо объектов Carbon, все заработало.
Странное поведение, учитывая, что они оба реализуют DateTimeInterface.
С сериализатором JMS вы не можете просто вернуть элемент, который будет преобразован в правильный выходной формат. Это означает, что где-то в вашем коде есть слушатель на
kernel.view, который использует сериализатор JMS. Проблема, вероятно, в этом слушателе, а не внутри JMS. Возможно, в каждом из ваших методов используются разные сериализаторы. В любом случае с кодом, который вы даете, невозможно понять, что здесь не так, но это не похоже на сериализатор JMS.