2014-10-11 5 views
0

Я хочу использовать один завод, чтобы создать свои объектыOne Factory для создания объектов

$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"); 

я получаю объект заказа, но если я хочу поставить это в цикле и передать значения, чтобы получить другие объекты порядка I получите ошибку, которую я не могу объявить, я думаю, что очевидно, что я могу установить имя фабрики, которое уже было создано; как я могу создать фабрику, которую я могу повторно использовать, передавая значения в качестве параметра?

Спасибо!

ответ

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; 
} 
+0

Hi Далее, как бы передать переменные для создания сущностей? – gastoncs

+0

Вы можете поместить свою петлю в заводскую логику. Однако, если я не ошибаюсь, проблема в вашем случае состоит в том, чтобы извлечь коллекцию объектов на заводе, чтобы вы могли ее перебирать и создавать сущности. В этом случае вы должны получить его через локатор сервисов. Если бы вы могли предоставить больше информации о том, как вы извлекаете данные для своих объектов, я бы предоставил более полезный совет по этой проблеме. –

+0

Спасибо, что я хочу сделать, это создать коллекцию заказов, как вы упомянули, но мне нужно передать значения переменных (order_id, concept, amount, date) для создания заказов; это для гидратации объектов из данных, то, что я хочу, это передать значения жестким параметром и получить объект порядка в качестве возврата. То, что я вижу на заводе, это то, что я могу просто передать переменную один раз, когда я создаю фабрику. Я надеюсь, что я буду более ясным. Я думаю, что вы предлагаете хорошо извлекать значения из базы данных, где я могу получить переменные оттуда. – gastoncs

0

я не уверен, чтобы дать вам соответствующий ответ для вашей потребности

так я хотел бы внести некоторые разъяснения:

Объявление службы (например, фабрики или invokable) и установка ее как услуги без совместного доступа приведет к тому, что диспетчер службы предоставит вам новый экземпляр e время ACH вы хотите, чтобы получить один

также тонкие средства получать новый экземпляр каждый раз, когда будет означать, что вам нужно будет использовать сеттеры или увлажняющие для персонализации/заполнения экземпляры

быть известно, что завод конструктор используется для внедрить диспетчер служб и, как правило, существенные зависимости, а сеттеры обычно используются для необязательных зависимостей и, конечно, для обновления экземпляров в течение срока службы.

Смежные вопросы