Die bekommen ' Der richtige Weg, dies zu tun, ist eine Fabrik zu verwenden, um den Entity Manager in jede Klasse zu injizieren, die sie benötigt. Klassen außer Fabriken sollten den ServiceLocator nicht wirklich kennen. So würde das Modul Config wie folgt aussehen:
'controllers' => array(
'factories' => array(
'mycontroller' => 'My\Namespace\MyControllerFactory'
)
)
Dann Ihre Factory-Klasse wie folgt aussehen würde:
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;
}
}
folgen dem gleichen Muster für alle anderen Klassen, die das Unternehmen Manager verbrauchen müssen.
Wenn Sie viele Entitäten verwenden, die den Entity Manager verwenden, sollten Sie in Erwägung ziehen, dem SerivceManager einen eigenen Initializer hinzuzufügen, der den Entity Manager injiziert, ohne dass eine Factory benötigt wird.
Nur eine Frage, da Sie über das Doctrine-ORM sprechen, haben Sie Probleme, den EntityManager auf Ihre Fieldset-Level herabzusetzen? :) – Sam