0

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

发生错误我如何消除此错误?

4

2 回答 2

7

updatedDatetime并且createddatetime需要是DateTime类的对象。

所以你的控制器代码应该是这样的:

$date= new \DateTime();
$entity->setCreatedDatetime($date);
$entity->setUpdatedDatetime($date);
于 2013-10-29T11:37:05.277 回答
1

正如另一篇文章所提到的,您的实体期望类型为DateTime,但我觉得需要额外的信息,但将来会帮助您。

使用学说,您可以添加事件(例如prePersist),因此您可以添加一个名为的函数setDefaultCreatedDatetime,如下所示:

public function setDefaultCreatedDatetime()
{
    $this->setCreatedDatetime(new \DateTime());
}

然后你可以添加:

lifecycleCallbacks:
    prePersist: [setDefaultCreatedDatetime]

到你的学说实体。这将使您不必手动调用此方法。

您也可以为您的setUpdatedTime和使用该preUpdate事件执行相同的操作。

于 2013-10-29T11:43:45.277 回答