El ' La forma correcta de hacerlo es utilizar una fábrica para inyectar el administrador de entidades en cualquier clase que lo necesite. Las clases, que no sean fábricas, no deberían estar realmente al tanto del ServiceLocator. Por lo tanto, su configuración del módulo se vería así:
'controllers' => array(
'factories' => array(
'mycontroller' => 'My\Namespace\MyControllerFactory'
)
)
Luego, su clase de fábrica sería algo como esto:
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;
}
}
Siga el mismo patrón para otras clases que necesitan para consumir el gestor de la entidad.
Si tiene muchas clases que consumen el administrador de entidades, puede considerar agregar su propio Initalizer al SerivceManager que inyectará el administrador de entidades sin la necesidad de una fábrica.
Solo una pregunta, ya que estás hablando de Doctrine ORM, ¿tienes problemas para bajar el entityManager a tus niveles de fieldset? :) – Sam