I have the following entity (only attached the relevant parts):
use ApiPlatformCoreAnnotationApiResource; use DoctrineORMMapping as ORM; use SymfonyComponentValidatorConstraints as Assert; /** * @ApiResource(mercure=true) * @ORMEntity(repositoryClass="AppRepositoryEventRepository") */ class Event { /** * @ORMColumn(type="datetime") * @AssertDateTime * @AssertNotNull */ private $createdAt; public function __construct() { $this->createdAt = new DateTime(); } public function getCreatedAt(): ?DateTimeInterface { return $this->createdAt; } public function setCreatedAt(DateTimeInterface $createdAt): self { $this->createdAt = $createdAt; return $this; } }
Its repository:
class EventRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Event::class); } }
When creating a POST request to the event endpoint (via Postman or the Swagger UI), it fails with the following exception:
Advertisement
Answer
You are using the wrong of assertion.
Date
expects a string or an object that can be cast into a string. And a DateTimeInterface
is neither.
You should be using a Type
constraint.
/** * @AssertType("DateTimeInterface") */ private $createdAt;
The ability to use AssertDate
to validate DateTime
objects was deprecated on Symfony 4.2, and on Symfony 5.0 it was removed altogether.