依赖注入和模型实体 - 正确的方法?

时间:2016-09-22 19:46:51

标签: php symfony dependency-injection

我的symfony2应用程序具有以下结构:

有一个服务data_provider,它从各种外部源获取数据并将其表示为实体对象。

有些对象有关系。目前我正在加载控制器或帮助器服务中的关系,如果需要的话。

这不是很方便,有时我想从我的实体ojbect获得关系。为此,我需要访问data_provider服务。

我想实现像doctrine lazy-loading这样的东西,这样做的正确方法是什么?

一些明显的解决方案 - 在每个实体instacne中注入data_provider,或者在某些静态属性中注入.col-image{ height: 100vh; border: 1px solid red; } img{ float:left; max-height: 100%; height: 100% },或者在服务中使用静态方法,或者使用evenet调度程序,但我不认为它是正确的方式

2 个答案:

答案 0 :(得分:0)

在Cerad的建议下对ObjectManagerInterface进行了一些研究,并发现了代码的和平:https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/Persistence/PersistentObject.php

PersistentObject实现ObjectManagerAware接口,它具有存储ObjectManager的私有静态属性。

所以我结束了这个:

class DataProvider
{
    public function __construct() 
    {
        ...
        AbstractEntity::setDataProvider($this);
    }
}

abstract class AbstractEntity
{
    private static $dataProvider;
    public static function setDataProvider() {...};
    protected static function getDataProvider() {...};
}

答案 1 :(得分:-1)

Symfony中服务的主要目的(而不仅仅是这一点)就是为您的项目提供全球的卓越功能。

在这方面,单个服务(在您的情况下 - dataProvider)应始终提供单个实体。如果必须处理从一个数据源返回的多个实体,请将数据源传递器包装到服务本身中,然后为每个实体定义一个服务,并将传送器注入其中。

然后,您可以将相应的实体服务注入您的控制器。