Zend Framework 2 - Doctrine 2 - 在timestamp字段创建

时间:2013-06-03 10:30:37

标签: php doctrine-orm timestamp zend-framework2 event-listener

我想在created_at中创建自定义ZF2注释。我找到了(German) tutorial如何在Symfony2中构建这样的注释。

除了注册prePersist听众外,其他所有内容都很容易复制。

Symfony中的代码是:

services:
created_at_listener:
    class: Scandio\Annotations\Driver\CreatedAtDriver
    tags:
      - {name: doctrine.event_listener, event: prePersist}
    arguments: [@annotation_reader]

如何在Zend中实现这一目标?

谢谢!

2 个答案:

答案 0 :(得分:5)

Thanks to Ocramius我找到了另一种创建在时间戳创建的PrePersist的解决方案:

/**
 * ...
 * @ORM\HasLifecycleCallbacks
 * ...
*/
class ChangeRequest

    ...

    /**
     * @ORM\Column(type="datetime", nullable=true)
     * @Form\Attributes({"type":"text"})
     * @Form\Options({"label":"Created at"})
     * @Form\Exclude()
     */
    protected $created_at;

    ...

    /**
     * @ORM\PrePersist
     */
    public function timestamp()
        {
        if(is_null($this->getCreatedAt())) {
            $this->setCreatedAt(new \DateTime());
        }
        return $this;
    }

答案 1 :(得分:4)

更简单的解决方案:

class ChangeRequest
{
    public function __construct()
    {
        $this->created_at=new \DateTime();
    }

    ...

    /**
     * @ORM\Column(type="datetime", nullable=true)
     * @Form\Attributes({"type":"text"})
     * @Form\Options({"label":"Created at"})
     * @Form\Exclude()
     */
    protected $created_at;

    ...
}

没有昂贵的活动功能。