我的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调度程序,但我不认为它是正确的方式
答案 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)应始终提供单个实体。如果必须处理从一个数据源返回的多个实体,请将数据源传递器包装到服务本身中,然后为每个实体定义一个服务,并将传送器注入其中。
然后,您可以将相应的实体服务注入您的控制器。