2010-07-31 7 views
26

J'ai un champ DateTime:Doctrine 2: Appel à un format de fonction membre() sur un non-objet ... dans DateTimeType.php

/** 
* Date time posted 
* @Column(type="datetime") 
*/ 
private $dtPosted; 

qui est réglé sur une valeur par défaut en utilisant un LifeCycleCallback

/** 
* @PrePersist 
*/ 
function onPrePersist() { 
    // set default date 
    $this->dtPosted = date('Y-m-d H:m:s'); 

Je reçois l'erreur suivante:

Fatal error: Call to a member function format() on a non-object in D:\ResourceLibrary\Frameworks\Doctrine\lib\Doctrine\DBAL\Types\DateTimeType.php on line 46

Répondre

55

le date() fonct l'ion renvoie une chaîne. Le type datetime fonctionne avec DateTime objets. Changez donc le type de mappage en string ou utilisez les objets DateTime.

+10

Vous avez raison. J'utiliserais 'date_create (date (...))' ou 'DateTime :: __ construct()' –

+0

@JiewMeng: excellente solution, merci! – Ron

3

je suis tombé sur un problème similaire, mais avec un champ time, et cette question et la réponse de @romanb de aidé. Je recevais l'erreur suivante, un peu comme celle de la question.

Call to a member function format() on a non-object in 
... /vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php on line 50 

La solution était similaire, pour les champs du time type de données, Doctrine accepte une instance de DateInterval PHP

$quizFixture1->setCompletionTime(\DateInterval::createFromDateString('743 seconds')); 
4

Essai avant d'utiliser votre setCreated avec annotations pour @ORM \ PrePersist et setUpdated avec annotations pour les méthodes @ORM \ PrePersist et @ORM \ PreUpdate par opposition aux méthodes prePersist et preUpdate ...

/** 
* @ORM\PrePersist 
*/ 
public function setCreated() 
{ 
    $this->created = new \DateTime(); 
} 

/** 
* @ORM\PrePersist 
* @ORM\PreUpdate 
*/ 
public function setUpdated() 
{ 
    $this->updated = new \DateTime(); 
} 
Questions connexes