Olá pessoal,
Após eu atualizar meu projeto usando o comando
php composer.php update,
ele parou de funcionar. Levei um tempão para identificar o motivo do problema, até que descobri que era algo relacionado ao ServiceManager.
No meu projeto há um módulo chamado Acl.
No seu arquivo Module.php há uma configuração de serviço que cria uma instância de \Acl\Service\Privilege que depende de \Doctrine\ORM\EntityManager. Este serviço é definido no método getServiceConfig() do Module.php:
namespace Acl;
use Zend\Mvc\ModuleRouteListener,
Zend\Mvc\MvcEvent;
class Module
{
...
public function getServiceConfig()
{
return array(
'factories' => array(
...
'Acl\Service\Privilege' => function($sm) {
return new Service\Privilege($sm->get('Doctrine\ORM\EntityManager'));
},
)
);
}
}No método indexAction() do meu AuthController eu instancio o Acl\Service\Privilege através do ServiceLocator:
class AuthController extends AbstractActionController {
public function indexAction() {
...
$privilegeService = $this->getServiceLocator()->get('Acl\Service\Privilege);
...
}
....
}Neste ponto uma exceção é gerada
object(stdClass)#369 (5) {
["__CLASS__"]=>
string(56) "Zend\ServiceManager\Exception\ServiceNotCreatedException"
["message"]=>
string(89) "An exception was raised while creating "Doctrine\ORM\EntityManager"; no instance returned"
["code"]=>
int(0)
["file"]=>
string(109) "/my_project_path/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php"
["line"]=>
int(909)
}
Anexo está o resultado da execução do comando \Doctrine\Common\Util\Debug::dump($sm) se eu o colocar no início da função que define Acl\Service\Privilege no método getServiceConfig.
A sequência de carga dos módulos no arquivo application.config.php é a seguinte:
return array(
// This should be an array of module namespaces used in the application.
'modules' => array(
//'ZendDeveloperTools',
'DoctrineModule',
'DoctrineORMModule',
'SlmLocale',
//'DluTwBootstrap',
'Acra',
'MOBBase',
'Acl',
'User',
'System',
'Api',
'Relatorio',
'Application',
),
...
O conteúdo do arquivo composer.json é o seguinte
{
"name": "zendframework/skeleton-application",
"description": "Skeleton Application for ZF2",
"license": "BSD-3-Clause",
"keywords": [
"framework",
"zf2"
],
"homepage": "http://framework.zend.com/",
"minimum-stability": "dev",
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.*@stable",
"zendframework/zend-developer-tools": "dev-master",
"bjyoungblood/bjy-profiler": "dev-master",
"doctrine/doctrine-orm-module": "dev-master",
"hounddog/doctrine-data-fixture-module": "dev-master",
"phpunit/phpunit": "3.7.*",
"slm/locale": "dev-master",
"dlu/dlutwbootstrap": "dev-master"
}
}
Sendo que a versão atual do ZF é 2.3.0 e do Doctrine é 2.5
Alguém já passou por e/ou sabe como resolver este problema?
Agradeço desde já
Diogo