On Symfony2 with Doctrine2, does Object = Entity?


On Symfony2 with Doctrine2, does Object = Entity?

假设我有一个User类:

$user = new User(1);
$user->setName('Bob'); // save "bob" to database with ID 1
$user->setGender('Male'); // save "male" to database with ID 1
echo $user->getName(); // display bob
echo $user->getGender(); // display "male";
echo $user->getDesignation() // display "Mr. Bob"

现在,在Symfony2中,使用Doctrine2,似乎Entity是一个用于与数据库建立链接的对象。所以我认为所有的setName() setGender() getName() &getGender()函数应该放在Bundle的Entity目录下的文件中(因为这些函数从数据库更新或SELECT数据)。

那么getDesignation()呢?

public function getDesignation() {
  if ($this->getGender() == 'Male') return "Mr. ".$this->getName();
  else return "Ms. ".$this->getName();
}

在实体中放置一个与数据库绝对没有链接的函数是可以的吗?这不是一个不好的做法吗?

是否可以放置一个与数据库绝对没有链接的函数?

可以。但是仔细看,它仍然在某种程度上"链接"到数据库,因为它使用了最初来自持久层(数据库)的性别和姓名数据。

这不是一个不好的做法吗?

这不是坏习惯,事实上这是非常有用的。它可以帮助您利用模型对象中的持久层,同时将代码与数据库访问解耦。

如果你的页面总是以英语显示,如果你需要将网站翻译成另一种语言,也许你应该创建一个额外的类来处理Symfony翻译器和实体,以便获得多语言标题。另一种更简单的方法是在单独的函数中只返回个人标题"mr.",如:

public function getDesignation() {
  if ($this->getGender() == 'Male') return "Mr." else return "Ms.";
}

因为你可以很容易地在你的模板{{entity.designation|trans}}中转换它

无论如何,我只是想贡献一点,但简短的回答是:是的,您可以使用实体来处理超出基本getter的额外时尚方法