我们总是将Symfony2中的实体用作仅包含setter和getter的普通PHP对象。但是如果我们在实体中有集合,那么放置方法可能是有用的,比如hasSomeProperty($ name)或isSomething($ someType)。例如:
class User
{
/** @var ArrayCollection */
private $friends;
public function hasFriend($name)
{
foreach ($this->friends as $friend) {
if ($friend->getName() === $name) {
return true;
}
}
return false;
}
}
从一个角度来看,这种方法包含的逻辑不应该放在实体中。但这种逻辑只涉及这个实体,因此根据得墨忒耳的法律,实体是写它的正确位置。你有什么想法?
答案 0 :(得分:5)
将这些hasX()
或isX()
方法添加到您的实体中绝对没问题,这是一个很好的做法,我个人认为这是放置它们的正确位置。
将这些方法保留在您的实体中的主要参数就是这样
您可以访问private
和protected
属性来计算hasX()
或isX()
的结果。
否则 - 将反射放在一边 - 您需要通过为不能用于任何其他目的的属性创建getter函数来向公共API公开(可能是明智的)信息。
你甚至可以最终添加大量的getter函数......只能用于从外部计算结果。
您可以在FOSUserBundle的Model\User
课程中看到一个示例。的(Code)强>