Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
comme on me la conseiller dans mon dernier post sur ce forum, j'ai bien relu la doc et le quickstart de ZF2.
Et je me suis lancé à le tenter, or je rencontre déja un problème avec le ServiceManager.
Je m'explique j'ai suivi ce document : Document et voici tous les message d'erreur que j'obtiens :
Zend\ServiceManager\Exception\ServiceNotFoundException
File:
E:\Projets\application\rouille\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php:456
Message:
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for ZFmUser\Model\UserTable
Stack trace:
#0 E:\Projets\application\rouille\module\ZFmUser\src\ZFmUser\Controller\LoginController.php(43): Zend\ServiceManager\ServiceManager->get('ZFmUser\Model\U...')
#1 E:\Projets\application\rouille\module\ZFmUser\src\ZFmUser\Controller\LoginController.php(22): ZFmUser\Controller\LoginController->getUserTable()
#2 E:\Projets\application\rouille\vendor\ZF2\library\Zend\Mvc\Controller\AbstractActionController.php(83): ZFmUser\Controller\LoginController->indexAction()
#3 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
#4 E:\Projets\application\rouille\vendor\ZF2\library\Zend\EventManager\EventManager.php(460): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#5 E:\Projets\application\rouille\vendor\ZF2\library\Zend\EventManager\EventManager.php(204): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#6 E:\Projets\application\rouille\vendor\ZF2\library\Zend\Mvc\Controller\AbstractController.php(117): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#7 E:\Projets\application\rouille\vendor\ZF2\library\Zend\Mvc\DispatchListener.php(114): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
#8 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
#9 E:\Projets\application\rouille\vendor\ZF2\library\Zend\EventManager\EventManager.php(460): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#10 E:\Projets\application\rouille\vendor\ZF2\library\Zend\EventManager\EventManager.php(204): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#11 E:\Projets\application\rouille\vendor\ZF2\library\Zend\Mvc\Application.php(294): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#12 E:\Projets\application\rouille\public\index.php(12): Zend\Mvc\Application->run()
#13 {main}
Voici mon fichier module.php :
[lang=php]use ZFmUser\Model\UserTable; use Zend\Db\ResultSet\ResultSet; use Zend\Db\TableGateway\TableGateway; class Module implements AutoloaderProviderInterface { public function getAutoloaderConfig() { return array( 'Zend\Loader\ClassMapAutoloader' => array( __DIR__ . '/autoload_classmap.php', ), 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( // if we're in a namespace deeper than one level we need to fix the \ in the path __NAMESPACE__ => __DIR__ . '/src/' . str_replace('\\', '/' , __NAMESPACE__), ), ), ); } public function getConfig() { return include __DIR__ . '/config/module.config.php'; } public function onBootstrap($e) { // You may not need to do this if you're doing it elsewhere in your // application $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); } public function getServiceConfig(){ return array( 'factories' => array( 'User\Model\UserTable' => function ($sm){ $tableGateway = $sm->get('UserTableGateway'); $table = new UserTable($tableGateway); return $table; }, 'UserTableGateway' => function ($sm){ $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $ResultSetPrototype = new ResultSet(); $ResultSetPrototype->setArrayObjectPrototype(new User()); return new TableGateway('t_personne_per',$dbAdapter,null,$ResultSetPrototype); }, ), ); } }
Pourriez vous m'aidez svp car j'ai beau cherché mais comme je débute j'ai besoin d'un indice au moins ou une aide.
Merci d'avance à tous
Dernière modification par shishi (19-04-2013 14:23:10)
Hors ligne
shishi a écrit:
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for ZFmUser\Model\UserTable
Je te donne un indice : le service manager n'arrive pas à trouver l'objet sous la référence ZFmUser\Model\UserTable ce qui veut dire que tu as déclaré nul part un objet sous cette référence dans Module.php ou dans un de tes fichiers de configuration.
Je pense donc que tu as fait une faute de frappe dans la classe où tu appelles cet objet .
Regardes de ce côté et si tu t'en sors pas met nous tes fichiers de config et ton fichier Module.php .
Tu mets ça entre 2 balises code et juste avant de mettre ton code tu ajoutes [lang=php]
Hors ligne
Bonjour je ne sais pas si tu as vu j'ai déjà rajouter dans mon premier post le fichier module\ZFmUser\module.php
voic le fichier : config\autoload\global.php
[lang=php] return array( // ... 'db' => array( 'driver' => 'Pdo', 'dsn' => 'pgsql:host=http://IP du serveur postgres;dbname=biblio', 'username' => 'login', 'password' => 'password', ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', ), ), );
et enfin le fichier module\application\module.php
[lang=php] <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Application; use Zend\Mvc\ModuleRouteListener; use Zend\Mvc\MvcEvent; class Module { public function onBootstrap(MvcEvent $e) { $e->getApplication()->getServiceManager()->get('translator'); $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); } public function getConfig() { return include __DIR__ . '/config/module.config.php'; } public function getAutoloaderConfig() { return array( 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, ), ), ); } }
Hors ligne
j'ai trouver une erreur maintenant il manque le driver postgres...
l'erreur venait de cette partie du code :
[lang=php] public function getServiceConfig(){ return array( 'factories' => array( 'User\Model\UserTable' => function ($sm){ $tableGateway = $sm->get('UserTableGateway'); $table = new UserTable($tableGateway); return $table; }, 'UserTableGateway' => function ($sm){ $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $ResultSetPrototype = new ResultSet(); $ResultSetPrototype->setArrayObjectPrototype(new User()); return new TableGateway('t_personne_per',$dbAdapter,null,$ResultSetPrototype); }, ), ); }
il fallait remplacer 'User\Model\UserTable' par 'ZFmUser\Model\UserTable'
merci d'avoir répondu orkin
Hors ligne
Est ce que quelqu'un peut m'éclairer s'il vous plait, je viens de regarder dans mon dossier vendor\Db\Adapter\ j'ai un dossier Pdo et un dossier Pgsql il me dit qu'il n'y à pas de driver : Connect Error: could not find driver
et que je mette 'driver' => 'Pdo', ou 'driver' => 'Pgsql', dans le fichier global.php cela ne change rien.
Je suis sure cela doit être une erreur con encore mais je la voit pas.
Quelqu'un aurait-il un autre indice svp ?
Merci d'avance
Hors ligne
Salut, évite les multi-postes tu as la fonction éditer pour ça. C'est donc ce que je te disais l'erreur venait de toi . Tu n'avais pas déclaré l'entrée correctement.
Pour la partie driver je peux pas t'aider je n'utilise pas Zend\Db donc j'ai pas ce soucis ^^ donc ce que je vais dire est à prendre avec des pincettes.
Grosso modo le driver permet la communication entre PHP et le serveur SQL dans ton cas postgresql. Renseigne toi voir comment s'appelle ce driver et parfois il est possible qu'il soit nécessaire d'activer une extension de php pour que ça soit gérer. On retrouve cette procédure dans la librairie intl pour l'internationalisation. Enfin le dsn c'est la façon dont le driver doit contacter la base de données . Maintenant faut que tu cherches un peu je peux pas t'aider plus
Hors ligne
En effet tu avais raison c'était une faute de syntaxe j'aurais du mieux relire mon code...
Pour le driver je vais regarder sur la doc le net et je finirais bien par trouver en tout cas merci pour tes réponses juste par curiosité tu utilise quoi pour te connecté à tes bases de données?
Hors ligne
J'utilise doctrine 2 qui s'intègre très facilement au ZF2 avec DoctrineModule et DoctrineORMModule
Hors ligne