一个工厂来创建实体

时间:2014-10-11 15:56:47

标签: zend-framework2

我想用一个工厂来创建我的实体

$this->getServiceManager()->setFactory("order_entity", 
                               new OrderEntityFactory($obj->concept,
                                                      $obj->currency,
                                                      $obj->exchangeRate,
                                                      $obj->cost,
                                                      $obj->percentageOfPayment,
                                                      $obj->accountId,
                                                      $obj->invoiceId,
                                                      $obj->paymentDate,
                                                      $obj->orderStatus,
                                                      $obj->categoryLinkNode));

$orderEntity = $this->getServiceManager()->get("order_entity");

我得到一个订单实体,但是如果我想把它放在一个循环中并传递值来获取其他订单实体我得到一个我无法重申的错误,我认为很明显我可以设置一个工厂名称已经创造了;如何通过传递值作为参数来创建可以重用的工厂?

谢谢!

2 个答案:

答案 0 :(得分:1)

我宁愿为存储我的实体的某种集合创建一个工厂。例如,

$this->getServiceManager()->setFactory("order_entity_collection",  function($serviceLocator){
    $collection = new \ArrayObject();

    foreach ($myEntities as $entity)
    {
        $collection[] = $entity;
    }

    return $collection;
});

您也可以通过这样做添加新的实体,

$collection = $serviceLocator->get('order_entity_collection');

foreach ($otherEntities as $entity)
{
    $collection[] = $entity;
}

答案 1 :(得分:0)

我不确定为您提供相关的答案

所以我想澄清一下:

声明服务(对于ex作为工厂或可调用)并将其设置为非共享服务将使服务管理器在每次要获取一个实例时为您提供一个新实例

也很薄意味着每次获得一个新实例意味着你需要使用setter或hydrator来个性化/填充你的实例

请注意,工厂构造函数用于注入服务管理器,通常必需的依赖项和setter通常用于可选的依赖项,当然还会在服务生命周期内更新实例