php Zend框架2 -原则2 -在时间戳字段创建

4ktjp1zp  于 2022-11-28  发布在  PHP
关注(0)|答案(2)|浏览(128)

我想在ZF2中创建一个自定义的created_at注解。我在Symfony2中找到了一个(German) tutorial如何构建这样的注解。
除了prePersist侦听器的注册之外,其他一切似乎都很容易复制。
Symfony中的代码为:

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

如何在Zend中实现这一点有什么建议吗?

yrdbyhpb

yrdbyhpb1#

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;
    }
gr8qqesn

gr8qqesn2#

更简单的解决方案:

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;

    ...
}

而不需要昂贵的事件功能。

相关问题