我在symfony2中创建一个实体,我将实体设置为createddatetime和updateddatetime,但是当我在控制器中使用setter时,错误就像这样发生了
FatalErrorException: Error: Call to a member function format() on a non-object in C:\wamp\www\QuickBacklog\vendor\doctrine\dbal\lib\Doctrine\DBAL\Types\DateTimeType.php line 44
这是我的实体代码:
/**
* Set createdDatetime
*
* @param \DateTime $createdDatetime
* @return Sections
*/
public function setCreatedDatetime($createdDatetime)
{
$this->createdDatetime = $createdDatetime;
return $this;
}
/**
* Get createdDatetime
*
* @return \DateTime
*/
public function getCreatedDatetime()
{
return $this->createdDatetime;
}
/**
* Set updatedDatetime
*
* @param \DateTime $updatedDatetime
* @return Sections
*/
public function setUpdatedDatetime($updatedDatetime)
{
$this->updatedDatetime = $updatedDatetime;
return $this;
}
/**
* Get updatedDatetime
*
* @return \DateTime
*/
public function getUpdatedDatetime()
{
return $this->updatedDatetime;
}
但是当我在控制器中写字时
$date=date('Y-m-d H:i:s');
$entity->setCreatedDatetime($date);
$entity->setUpdatedDatetime($date);
我是如何删除此错误的错误?
答案 0 :(得分:7)
updatedDatetime
和createddatetime
需要是DateTime
类的对象。
所以你的控制器代码应该是这样的:
$date= new \DateTime();
$entity->setCreatedDatetime($date);
$entity->setUpdatedDatetime($date);
答案 1 :(得分:1)
正如其他帖子所提到的那样,您的实体希望该类型为DateTime
,但我觉得这是一个额外的信息,但将来可以帮助您。
使用doctrine,您可以添加事件(例如prePersist
),这样您就可以添加一个名为setDefaultCreatedDatetime
的函数,如下所示:
public function setDefaultCreatedDatetime()
{
$this->setCreatedDatetime(new \DateTime());
}
然后你可以添加:
lifecycleCallbacks:
prePersist: [setDefaultCreatedDatetime]
到你的学说实体。这样可以省去手动调用此方法的费用。
您也可以对setUpdatedTime
执行同样的操作并使用preUpdate
事件。