No projeto que estou trabalhando usamos Zed2 com Doctrine.
Normalmente, para trabalhar com os dados usamos destas algumas formas. Exemplos:
$usuario = $this->entityManager->find(Usuario::class, $usuarioId);
$meuService = new MeuService($this->getServiceLocator());
$connection = $this->entityManager->getConnection();
$result = $connection->executeQuery($sql, ['idUsuario' => $usuarioId])->fetch();
O que todos tem em comum, é que estendem classes:
AbstractApplicationController
AbstractActionController
AbstractController
Que é de onde vem o ServiceLocator e EntityManager.
Geralmetne nas classes de serviços temos:
class QualquerService
{
protected $sm;
protected $em;
function __construct(ServiceLocatorInterface $sm)
{
$this->setServiceManager($sm);
}
protected function setServiceManager($sm)
{
$this->sm = $sm;
}
protected function getServiceManager()
{
return $this->sm;
}
public function getEntityManager()
{
if (null === $this->em) {
$this->em = $this->getServiceManager()->get('Doctrine\ORM\EntityManager');
}
return $this->em;
}
....
}
A questão é que queria saber como usar o EntityManager e ServiceLocator sem depender dos controllers.
Temos serviços rodando em background nos quais precisaria do EntityManager/ServiceLocator mas não consigo passá-los como argumento.
Como eu poderia usá-los em uma nova classe que não herda nada?