我正在创建Symfony项目。现在我正在努力寻找添加自定义方法的最佳实践..你的是什么?
视觉说明:
users
表
id | name | surname
---+------+--------
1 | John | Smith
2 | Matt | Malone
Entity\User.php
namespace TestBundle\Entity\User;
use Doctrine\ORM\Mapping as ORM;
/**
* User
* @ORM\Table(name="users")
* @ORM\Entity
*/
class User
{
/**
* @ORM\Column(name="id", type="string", length=36)
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=255, nullable=true)
*/
private $name;
/**
* @ORM\Column(name="surname", type="string", length=255, nullable=true)
*/
private $surname;
/**
* OneToMany
*/
private $userCompanies;
{{ Setters and Getters }}
}
我应该存储自定义方法,例如:
function getFullName()
{
return sprintf("%s %s", $this->getName(), $this->getSurname());
}
或更复杂:
function getCurrentUserCompany()
{
foreach ($this->getUserCompanies() as $company) {
if ($company->isActive()) {
return $company;
}
}
return null;
}
请注意,所有数据都是通过JSON
到目前为止,我尝试扩展class
,但annotations
未按预期工作。将自定义methods
放置在同一文件中看起来很垃圾,因为它们将不止一个。
但是..但是如果有repositoryClass
- maby,那么自定义methods
也有位置?
谢谢!
答案 0 :(得分:3)
如果它是关于主要用于显示目的的方法,那么它们与getter非常相似,在我看来它们最适合的是Entity本身,所以在你的User.php类中。
存储库用于定义从存储级别(DB,缓存...)获取实体的方法,但视图级别(您的树枝)应该从实体本身获取数据。
如果您需要更复杂的内容或需要重复使用它,例如日期过滤器,那么创建Twig扩展程序会更好。
答案 1 :(得分:1)
这样的方法属于实体类,没有理由分割代码。如果许多实体类共享某些方法,则可以始终为它们创建共享基本抽象类或特征。
如果你真的想要分开的文件,为了你的审美,然后使用特征,但请记住,它不适合和传统使用它们。