我的Blog包中有一个Post实体。帖子可以有很多评论。当我创建一个新的评论实体来附加到帖子时,我必须设置一堆属性,例如,
$comment->setTimestamp( new \DateTime() );
$comment->setUserId( $this->getUser()->getId() );
$comment->setHost( $this->getClientIP() );
默认时区在实体的构造函数中很容易。如何在构造实体时自动设置userid和clientip? getClientIP是目前控制器中的一个函数。这应该是服务。我可以有工厂为我创建评论吗?
答案 0 :(得分:2)
我觉得你最好的选择是class CommentFactory extends EntityFactory
。
工厂将负责为您创建实体,您传递所需的实体(例如用户实体),它将为您返回新对象:
$commentFactory = new CommentFactory($user, $client, $whatever);
$comment = $commentFactory->getNewComment();
答案 1 :(得分:0)
您可以从实体构造中调用任何实体方法,并且可以将任何内容从控制器传递到注释的新实例。 例如,在控制器操作中获取时间戳,用户ID和主机,并将这些作为参数传递给Comment实体的构造。 在构造中调用setter方法。
答案 2 :(得分: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();