j'ai donc suivi cette base de données et le tutoriel Doctrine: https://symfony.com/doc/current/doctrine.html
la seule différence est que j'ai ajouté un created_ts
champ à celui-ci (parmi d'autres champs, mais ils fonctionnent très bien, donc pas besoin d'y entrer).
J'ai utilisé le make:entity
commande pour générer ma classe et la méthode pour définir mon created_ts
a été généré comme ceci:
public function setCreatedTs(\DateTimeInterface $created_ts): self
{
$this->created_ts = $created_ts;
return $this;
}
Donc dans mon /index
page Je suis allé enregistrer une nouvelle entité en utilisant:
$category->setCreatedTs(\DateTimeInterface::class, $date);
J'avais une drôle de sensation que cela ferait une erreur et j'avais raison:
Type error: Argument 1 passed to App\Entity\Category::setCreatedTs() must implement interface DateTimeInterface, string given
mais je ne sais pas comment implémenter le DateTimeInterface
à l'intérieur de la fonction .. J'ai essayé de googler mais cela montre beaucoup de Symfony2
posts, quelques-uns que j'ai essayé en vain.
Comment définir une valeur datetime
dans mon entité à partir de ->set
méthode?
(s'il y a déjà une réponse, veuillez lier. #symfonyScrub)
# tried doing this:
$dateImmutable = \DateTime::createFromFormat('Y-m-d H:i:s', strtotime('now')); # also tried using \DateTimeImmutable
$category->setCategoryName('PHP');
$category->setCategoryBio('This is a category for PHP');
$category->setApproved(1);
$category->setGuruId(1);
$category->setCreatedTs($dateImmutable); # changes error from about a string to bool
Si votre date est la date actuelle, vous pouvez simplement faire ceci:
$category->setCreatedTs(new \DateTime())
Votre première erreur a été provoquée par la fonction strtotime
qui retourne un horodatage mais le constructeur\DateTime s'attendait à un Y-m-d H:i:s
format.
C'est pourquoi au lieu de créer un\DateTime valide, il a renvoyé false.
Même si ce n'est pas nécessaire dans ce cas, vous auriez dû faire quelque chose comme ça pour créer un \DateTime
basé sur un horodatage:
$date = new \DateTime('@'.strtotime('now'));