を使用してコントローラー内のエンティティマネージャーにアクセスできます$this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
しかし、Zendframework 2 のプロジェクトの残りの部分でエンティティ マネージャーのシングルトン インスタンスにアクセスするにはどうすればよいでしょうか。
を使用してコントローラー内のエンティティマネージャーにアクセスできます$this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
しかし、Zendframework 2 のプロジェクトの残りの部分でエンティティ マネージャーのシングルトン インスタンスにアクセスするにはどうすればよいでしょうか。
それを行う「正しい」方法は、ファクトリを使用してエンティティマネージャを必要なクラスに注入することです。ファクトリ以外のクラスは、実際には ServiceLocator を認識するべきではありません。したがって、モジュール構成は次のようになります。
'controllers' => array(
'factories' => array(
'mycontroller' => 'My\Namespace\MyControllerFactory'
)
)
次に、ファクトリ クラスは次のようになります。
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class MyControllerFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$serviceLocator = $serviceLocator->getServiceLocator();
$myController = new MyController;
$myController->setEntityManager(
$serviceLocator->get('doctrine.entitymanager.orm_default')
);
return $myController;
}
}
エンティティ マネージャーを使用する必要がある他のクラスについても、同じパターンに従います。
エンティティ マネージャを使用するクラスが非常に多い場合は、ファクトリを必要とせずにエンティティ マネージャを注入する独自の Initalizer を SerivceManager に追加することを検討することをお勧めします。