Zend framework2 一个工厂创建实体

Zend framework2 一个工厂创建实体,zend-framework2,Zend Framework2,我想使用一个工厂来创建实体 $this->getServiceManager()->setFactory("order_entity", new OrderEntityFactory($obj->concept, $obj->currency,

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

$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");
我得到一个订单实体,但如果我想把它放在一个循环中,并传递值以获得其他订单实体,我会得到一个无法重新声明的错误,我认为这很明显,我可以设置一个已经创建的工厂名称;如何通过将值作为参数传递来创建可重用的工厂


谢谢

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

$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;
}

对于你的需要,我不确定能给你一个相关的答案

因此,我想澄清一下:

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

此外,thin意味着每次获得一个新实例将意味着您需要使用setter或hydrators来个性化/填充您的实例


请注意,工厂构造函数用于注入服务管理器,基本依赖项和setter通常用于可选依赖项,当然,在服务生命周期内更新实例。嗨,接下来,我如何传递变量以创建实体?您可以将循环放入工厂逻辑中。但是,如果我没有弄错的话,您案例中的问题是在工厂中检索对象集合,这样您就可以迭代它并创建实体。在这种情况下,您应该通过服务定位器获取它。如果您可以提供有关如何检索实体数据的更多信息,我将提供有关此问题的更多有用提示。谢谢,我想做的是创建您提到的订单集合,但我需要传递变量值(订单id、概念、金额、日期)以创建订单;这是从一个数据中提取对象,我想要的是传递一个参数,并得到一个order实体作为返回。我在工厂中看到的是,我可以在创建工厂时只传递一次变量。我希望我说得更清楚些。。我认为您的建议是从数据库中检索值,从数据库中获取变量。我认为您误解了ServiceManager库提供的工厂的用途。您可以使用它来创建服务,但在您的情况下,您需要一个工厂来创建一个实体。您试图在错误的上下文中应用服务工厂。为了实现您想要的,您应该独立于ServiceManager库创建自己的实体工厂类。简单地说,实体不是服务,所以您不应该通过服务工厂创建它。然而,实体集合可以是一个服务,因此,可以由ServiceManager库提供的服务工厂创建。我明白了!非常感谢,我唯一的问题是实体集合如何成为一项服务?