我扩展了一个类(FOSUserBundle),但是在遵循symfony从理论实体中分离逻辑的最佳实践的同时,我创建了一个处理实例化、对象操作等的“逻辑”服务。
当我扩展一个实体时,服务的类型暗示、PHPdoc返回对象类型等都是指超类,而不是新扩展的子类实体。现在,我需要创建新的逻辑(和一个服务)来处理新的扩展实体。
我不想为每个扩展类重写这个服务/实体逻辑(我怀疑这将是一个糟糕的实践)。最好有一个可以扩展的超级服务类来处理创建的扩展实体。
所以我的问题是: #1:编写处理扩展实体的逻辑类/服务的最佳实践是什么?
我的后续问题是:对于像我这样热衷于了解Symfony最佳实践的人,您是否可以在symfony设计方面提供任何好的资源?我发现symfony网站的最佳实践是一个很好的入门,但在中级/高级最佳实践方面缺乏。
我期待着找到这个答案,并感谢你能提供的任何帮助:-)
发布于 2016-05-13 07:21:49
我通过扩展包含扩展实体逻辑的服务类和覆盖两个方法(构造函数和新创建的方法,现在只包含“新className”行)来解决这个问题。这允许重写服务方法以更改所使用的存储库(子类),因此使用该实体的存储库的所有其他服务方法--新的--都指向扩展实体的repo。用“extendedClassName()”重写包含“extendedClassName()”的方法也允许我使用工厂方法。
现在代码看起来很棒,我可以重复使用这些东西!
包含子实体特定方法和类overiddes的子类服务如下所示:
class PersonManager extends BasePersonManager
{
public function __construct(EntityManager $em, EventDispatcherInterface $dispatcher)
{
$this->em = $em;
$this->repo = $this->em->getRepository('TwenchaBundle:person');
$this->dispatcher = $dispatcher;
}
public function createNew () {
return new person();
}
}虽然基本服务类如下所示:
class BasePersonManager
{
protected $em;
protected $repo;
protected $dispatcher;
public function __construct(EntityManager $em, EventDispatcherInterface $dispatcher)
{
$this->em = $em;
$this->repo = $this->em->getRepository('PersonBundle:BasePerson');
$this->dispatcher = $dispatcher;
}
public function createNew () {
return new BasePerson();
}
...https://stackoverflow.com/questions/37184017
复制相似问题