Symfony |在Entity中初始化属性的最佳方法

时间:2016-04-26 13:34:09

标签: entity symfony

我是Symfony的新手,我对在实体中初始化属性的最佳方法有疑问。

例如,我有一个实体“问题”,它有一个属性“user”,我这样做:

$question = new Question();
$question->setUser($this->getUser());
$form = $this->createForm(QuestionType::class, $question);

它可以工作,我也可以使用构造函数来完成:

$question = new Question($this->getUser());
$form = $this->createForm(QuestionType::class, $question);

它也有效,但我不知道哪一个是最好的。或许还有另一个更好的解决方案?我的意思是,我将不得不多次初始化这个实体,也许还有办法:

$question = new Question();
$form = $this->createForm(QuestionType::class, $question);

所以我不必关心控制器中的“用户”?

无论如何,这样做的最佳解决方案是什么?

感谢。

1 个答案:

答案 0 :(得分:2)

这取决于您的上下文中的问题是否必须拥有用户。如果它是可选的,那么setter就可以了 - 即使没有用户也可以创建一个问题。如果有必要,您应该将它注入构造函数中 - 这也有助于其他开发人员和您未来的自我了解您无法在没有用户的情况下创建问题。

第三个选项意味着你必须以某种方式从问题内部获取用户,这会将其耦合到负责该问题的机制(例如安全组件)。这通常是一个坏主意,因为它限制了它的使用并使测试变得更加困难。

另一个提示:也许setUser()对于一个Question类来说不是一个好的命名选择,因为它缺乏对它的真实表达。这是问题的作者吗?然后setAuthor()可能是更好的选择。