तरह से मैं संभाल सिद्धांत सेवाओं के माध्यम से है, मैं तो वह ऐसा कार्य करें:
//some Controller
public function someAction()
{
$service = $this->getServiceLocator()->get('my_entity_service');
return new ViewModel(array(
'entities' => $service->findAll()
));
}
Service->findAll()
कुछ इस तरह दिखेगा:
public function findAll()
{
return $this->getEntityRepository()->findAll();
}
अब हम my_entity_service
परिभाषित करने की जरूरत। मैं अपने Module.php
public function getServiceConfig()
{
return array(
'factories' => array(
'my_entity_service' => 'Namespace\Factory\MyServiceFactory'
)
);
}
अगला अंदर ऐसा करने मैं बनाने फैक्टरी (ध्यान दें: यह भी Module.php अंदर गुमनाम समारोह के माध्यम से किया जा सकता है)
<?php
namespace Namespace\Factory;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\ServiceManager\FactoryInterface;
use Namespace\Model\MyModel;
class MyServiceFactory implements FactoryInterface
{
/**
* Create service
*
* @param ServiceLocatorInterface $serviceLocator
* @return mixed
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{
$myModel= new MyModel();
$myModel->setEntityManager($serviceLocator->get('Doctrine\ORM\EntityManager'));
return $myModel;
}
}
अब इस चबाना एक बहुत है: डी पूरी तरह से मिलता है। यद्यपि यहां क्या हो रहा है वास्तव में बहुत सरल है। अपना मॉडल बनाने के बजाय और किसी भी तरह EntityManager पर पहुंचने के लिए, आप ZF2 के सर्विस मैनेजर को मॉडल बनाने के लिए कॉल करते हैं और इसमें EntityManager इंजेक्ट करते हैं।
यदि यह अभी भी आपको भ्रमित कर रहा है, तो मैं खुशी से खुद को बेहतर समझाने की कोशिश करूंगा। आगे स्पष्टीकरण के लिए हालांकि मैं आपके उपयोग के मामले के बारे में जानना चाहता हूं। I.e: आपको EntityManager की आवश्यकता है या आपको इसकी आवश्यकता कहां है।
इस कोड उदाहरण सवाल दायरे के बाहर है
बस आप कुछ का लाइव उदाहरण मैं क्या ServiceFactories के माध्यम से रूपों के साथ देने के लिए: कैसे करने के लिए
public function createService(ServiceLocatorInterface $serviceLocator)
{
$form = new ReferenzwertForm();
$form->setHydrator(new DoctrineEntity($serviceLocator->get('Doctrine\ORM\EntityManager')))
->setObject(new Referenzwert())
->setInputFilter(new ReferenzwertFilter())
->setAttribute('method', 'post');
return $form;
}