如何在symfony2中删除日期时间错误?

时间:2013-10-29 11:28:04

标签: php symfony doctrine-orm doctrine

我在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);

我是如何删除此错误的错误?

2 个答案:

答案 0 :(得分:7)

updatedDatetimecreateddatetime需要是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事件。