La mise à jour de Doctrine2 a provoqué une erreur AnnotationRegistry registerLoader dans Zend Framework 3
Je suis en train de travailler sur un CMS basé sur Zend Framework 3.0 pour gérer une base de I avec la Doctrine. Qu'est-ce que mon problème lors de la gestion des paquets avec le compositeur? Récemment, j'ai mis à jour tous les packages pour les versions les plus récentes et envoyé au serveur, rien n'a été changé dans d'autres fichiers. Après la mise à jour de mon site affiche l'erreur suivante:
Fatal error: Uncaught TypeError: valeur de Retour de la Doctrine\Common\Annotations\AnnotationRegistry::registerLoader() doit être une instance de la Doctrine\Common\Annotations\nulle, aucun retourné dans /home/platne/serwer18346/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php:117 Stack trace: #0 /home/platne/serwer18346/vendor/doctrine/doctrine-module/src/DoctrineModule/Module.php(57): la Doctrine\Common\Annotations\AnnotationRegistry::registerLoader(Objet(Fermeture)) #1 /home/platne/serwer18346/vendor/zendframework/zend-modulemanager/src/Listener/InitTrigger.php(33): DoctrineModule\Module->init(Objet(Zend\ModuleManager\ModuleManager)) #2 /home/platne/serwer18346/vendor/zendframework/zend-eventmanager/src/EventManager.php(322): Zend\ModuleManager\Auditeur\InitTrigger->__invoke(Object(Zend\ModuleManager\ModuleEvent)) #3 /home/platne/serwer18346/vendor/zendframework/zend-eventmanager/src/EventManager.php(171): Zend\EventManager\EventManager->triggerListeners(Objet(Zend\ModuleManager\ModuleEvent)) #4 /home/p /home/platne/serwer18346/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php sur la ligne 117
Certains le code de l'application, si nécessaire:
modules:
return [
'Zend\Router',
'Zend\Validator',
'DoctrineModule',
'DoctrineORMModule',
'Core',
];
développement.local(mode développeur est active):
'doctrine' => [
'connection' => [
'orm_default' => [
'driverClass' => Doctrine\DBAL\Driver\PDOMySql\Driver::class,
'params' => [
'host' => '******',
'user' => '*******',
'password' => '******',
'dbname' => '*******',
'charset' => 'utf8'
]
]
]
]
module.config:
'doctrine' => [
'driver' => [
__NAMESPACE__ . '_driver' => [
'class' => AnnotationDriver::class,
'cache' => 'array',
'paths' => [__DIR__.'/../src/Model']
],
'orm_default' => [
'drivers' => [
__NAMESPACE__ . '\Model' => __NAMESPACE__ . '_driver'
]
]
]
]
Contrôleur D'Usine:
public function __invoke(ContainerInterface $container,$requestedName, array $options = null)
{
$controllerInstance = null;
switch($requestedName){
case 'Core\Controller\IndexController': $controllerInstance = $this->_invokeIndex($container); break;
case 'Core\Controller\PagesController': $controllerInstance = $this->_invokePages($container); break;
}
return $controllerInstance;
}
protected function _invokeIndex(ContainerInterface $container)
{
return new Controller\IndexController(
$container->get('doctrine.entitymanager.orm_default')
);
}
protected function _invokePages(ContainerInterface $container)
{
return new Controller\PagesController(
$container->get('doctrine.entitymanager.orm_default')
);
}
Contrôleur Parent:
protected $_entityManager;
/**
* AppController constructor.
* @param EntityManager $entityManager
*/
public function __construct(EntityManager $entityManager)
{
$this->_entityManager = $entityManager;
}
/**
* @return EntityManager
*/
public function getEntityManager()
{
return $this->_entityManager;
}
Comme je l'ai dit, ce code a travaillé avant la mise à jour. Après la mise à jour il me montre que l'erreur, ce qui est plus après le téléchargement de versions précédentes de l'erreur reste. Je triead réécriture du code, mais avec le même effet.
Compositeur(sans les données du projet):
"require": {
"zendframework/zend-mvc": "*",
"zendframework/zend-developer-tools": "*",
"zendframework/zend-session": "*",
"zendframework/zend-authentication": "*",
"zfcampus/zf-development-mode": "*",
"doctrine/doctrine-orm-module": "*"
},
"autoload": {
"psr-4": {
"Core\\": "module/Core/src/"
}
}
source d'informationauteur Manveru | 2017-07-26
Vous devez vous connecter pour publier un commentaire.
Cette erreur causée par la dernière version de
Doctrine\Common\Annotations
utilisation PHP 7.1. C'est pourquoi, l'utilisationvoid
commereturn type
. Et il n'est pas pris en charge sur PHP 7.0.*. C'est nouvelle fonctionnalité de PHP 7.1- Je utiliser
doctrine-orm-module 1.1
dans mon ZF3 projet à l'aide de PHP 7.0. Et cela fonctionne bien. Donc, il suffit de remplacer votredoctrine-orm-module
version de1.1
.Je vous suggère de définir la version de dépendances que vous avez utilisé dans compositeur. C'est le dessein de faire de votre projet n'est pas cassée lorsque la nouvelle version de dépendances libéré.
Pour éviter ce genre de problèmes, une bonne pratique consiste à définir le compositeur
config.platform
réglage:Cela indiquera compositeur pour mettre à jour des paquets, mais seulement pour une version qui prend toujours en charge de cette version de PHP. Donc généralement, ce numéro de version sera la version de votre serveur de production.
Vous pouvez essayer d'utiliser la configuration suivante. Il fonctionne pour moi.
Également très utile lorsque vous avez des rapports compositeur/problèmes de package est la sortie de compositeur montrer. Le mien ressemble à ça:
Si vous avez de tels problèmes à l'avenir, aller à https://packagist.org/packages/ et de recherche pour les colis qui provoque des problèmes.
Par exemple doctrine/annotations:
https://packagist.org/packages/doctrine/annotations#v1.5.0
Puis y chercher (nécessite: php: ^7.1) et si ce package correspond à votre version de PHP.
(Dans votre cas, à l'aide de PHP 7.0 il ne correspond pas)
Mais https://packagist.org/packages/doctrine/annotations#v1.4.0 correspond à votre version PHP (nécessite: php: ^5.6 || ^7.0) et vous pouvez essayer de l'utiliser.
Il suffit de supprimer le compositeur.verrouillage de votre projet, de même pour le "vendeur" le dossier.
run et profitez ->
php composer.phar selfupdate
php composer.phar install