0

我的博客包中有一个 Post 实体。帖子可以有很多评论。当我创建一个新的评论实体以附加到帖子时,我必须设置一堆属性,例如,

$comment->setTimestamp( new \DateTime() );
$comment->setUserId( $this->getUser()->getId() );
$comment->setHost( $this->getClientIP() );

默认时区在实体的构造函数中很容易。构建实体时如何自动设置userid和clientip?getClientIP 目前是控制器中的一个函数。这应该是服务。我可以有一个为我创建评论的工厂吗?

4

3 回答 3

2

在我看来,您最好的选择是class CommentFactory extends EntityFactory.

工厂将负责为您创建实体,您传递所需的实体(例如用户实体),它会为您返回新对象:

$commentFactory = new CommentFactory($user, $client, $whatever);
$comment = $commentFactory->getNewComment();
于 2013-08-23T14:19:01.973 回答
0

您可以为此在控制器中创建辅助函数

protected function getNewComment() {
    $comment = new Comment();
    $comment->setTimestamp( new \DateTime() );
    $comment->setUserId( $this->getUser()->getId() );
    $comment->setHost( $this->getClientIP() );

    return $comment;
}

接着

$comment = $this->getNewComment();
于 2013-08-23T06:43:35.797 回答
0

您可以从实体构造调用任何实体方法,并且可以将任何内容从控制器传递到注释的新实例。例如,在控制器操作中获取时间戳、用户 ID 和主机,并将它们作为参数传递给 Comment 实体的构造。调用构造中的 setter 方法。

于 2013-08-23T06:24:40.787 回答