我處理原則是通過服務的方式,我這樣做如下:
//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;
}
}
現在,這是一個很大的咀嚼: DI完全明白這一點。這裏發生的事情其實很簡單。您不需要創建模型並以某種方式進入EntityManager,而是調用ZF2的ServiceManager爲您創建模型並將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;
}
來源
2012-10-25 09:31:20
Sam