Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-04-2013 14:06:58

shishi
Membre
Date d'inscription: 17-03-2013
Messages: 67

Problème de service manager

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 :

Code:

[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

 

#2 19-04-2013 14:16:55

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Problème de service manager

shishi a écrit:

Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for ZFmUser\Model\UserTable

Je te donne un indice smile : 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 smile.

Regardes de ce côté et si tu t'en sors pas met nous tes fichiers de config et ton fichier Module.php wink.

Tu mets ça entre 2 balises code et juste avant de mettre ton code tu ajoutes [lang=php]

Hors ligne

 

#3 19-04-2013 14:33:33

shishi
Membre
Date d'inscription: 17-03-2013
Messages: 67

Re: Problème de service manager

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

Code:

[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

Code:

[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

 

#4 19-04-2013 14:51:09

shishi
Membre
Date d'inscription: 17-03-2013
Messages: 67

Re: Problème de service manager

j'ai trouver une erreur maintenant il manque le driver postgres...
l'erreur venait de cette partie du code :

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

 

#5 19-04-2013 15:25:10

shishi
Membre
Date d'inscription: 17-03-2013
Messages: 67

Re: Problème de service manager

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

 

#6 19-04-2013 16:47:19

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Problème de service manager

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 smile. 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 smile. Maintenant faut que tu cherches un peu je peux pas t'aider plus wink

Hors ligne

 

#7 20-04-2013 11:45:50

shishi
Membre
Date d'inscription: 17-03-2013
Messages: 67

Re: Problème de service manager

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

 

#8 22-04-2013 08:41:46

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Problème de service manager

J'utilise doctrine 2 qui s'intègre très facilement au ZF2 avec DoctrineModule et DoctrineORMModule smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages