【问题标题】:Zend Framework 2 - Doctrine 2 - Created at timestamp fieldZend Framework 2 - Doctrine 2 - 在时间戳字段创建
【发布时间】:2013-06-03 10:30:37
【问题描述】:
我想在ZF2 中创建一个自定义created_at 注释。我找到了(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 中实现吗?
谢谢!
【问题讨论】:
标签:
php
doctrine-orm
timestamp
zend-framework2
event-listener
【解决方案1】:
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;
}
【解决方案2】:
更简单的解决方案:
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;
...
}
没有昂贵的事件功能。