我正在创建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
的地方吗?
谢谢!
如果是关于主要用于显示目的的方法,那么它们与getter非常相似,在我看来,它们最适合实体本身,所以在你的User.php类中。
存储库用于定义从存储级别(DB,缓存...(获取实体的方法,但视图级别(您的树枝(应从实体本身获取数据。
如果您需要更复杂的东西或需要重用它,例如日期过滤器,那么最好创建一个 Twig 扩展。
像这样的方法属于实体类,没有理由拆分代码。如果许多实体类共享某些方法,则始终可以为它们创建共享的基抽象类或特征。
如果您真的为了美观而想要单独的文件,请使用特征,但请记住,这不是正确和常规的使用。