使用默认属性创建实体对象的最佳方法

时间:2013-08-23 02:33:44

标签: php symfony

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

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

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

3 个答案:

答案 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();