首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何处存储扩展Symfony实体逻辑

何处存储扩展Symfony实体逻辑
EN

Stack Overflow用户
提问于 2016-05-12 10:19:33
回答 1查看 180关注 0票数 1

我扩展了一个类(FOSUserBundle),但是在遵循symfony从理论实体中分离逻辑的最佳实践的同时,我创建了一个处理实例化、对象操作等的“逻辑”服务。

当我扩展一个实体时,服务的类型暗示、PHPdoc返回对象类型等都是指超类,而不是新扩展的子类实体。现在,我需要创建新的逻辑(和一个服务)来处理新的扩展实体。

我不想为每个扩展类重写这个服务/实体逻辑(我怀疑这将是一个糟糕的实践)。最好有一个可以扩展的超级服务类来处理创建的扩展实体。

所以我的问题是: #1:编写处理扩展实体的逻辑类/服务的最佳实践是什么?

我的后续问题是:对于像我这样热衷于了解Symfony最佳实践的人,您是否可以在symfony设计方面提供任何好的资源?我发现symfony网站的最佳实践是一个很好的入门,但在中级/高级最佳实践方面缺乏。

我期待着找到这个答案,并感谢你能提供的任何帮助:-)

EN

回答 1

Stack Overflow用户

发布于 2016-05-13 07:21:49

我通过扩展包含扩展实体逻辑的服务类和覆盖两个方法(构造函数和新创建的方法,现在只包含“新className”行)来解决这个问题。这允许重写服务方法以更改所使用的存储库(子类),因此使用该实体的存储库的所有其他服务方法--新的--都指向扩展实体的repo。用“extendedClassName()”重写包含“extendedClassName()”的方法也允许我使用工厂方法。

现在代码看起来很棒,我可以重复使用这些东西!

包含子实体特定方法和类overiddes的子类服务如下所示:

代码语言:javascript
复制
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();
    }
}

虽然基本服务类如下所示:

代码语言:javascript
复制
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();
    }
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37184017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档