Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-03-2014 12:26:55

ach-87
Nouveau membre
Date d'inscription: 29-03-2014
Messages: 2

Utiliser un factory d'un module dans le controller d'un autre module

Bonjour à tous,

J'ai lu un sujet similaire sur le forum mais je n'arrive toujours pas à comprendre comment le serviceManager fonctionne.
Normalement les "Modules.php" de tous les modules sont fusionnés, donc si j'ai un service (factory) déclaré dans un module (utilisateur) je suis sensé pouvoir l'utiliser dans un autre module (login) non ??

Mon projet comporte pour l'instant un module Login et un module Utilisateur. Ce que je souhaite faire c'est pouvoir chercher un utilisateur dans le controller du module Login.

voilà mon code :

fichier Utilisateur\Module.php

Code:

 [lang=php]

namespace Utilisateur;

use Utilisateur\Model\Utilisateur;
use Utilisateur\Model\UtilisateurTable;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
 
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;

class Module implements AutoloaderProviderInterface, ConfigProviderInterface
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
            ),
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }
    
    public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'Utilisateur\Model\UtilisateurTable' =>  function($sm) {
                    $tableGateway = $sm->get('UtilisateurTableGateway');
                    $table = new UtilisateurTable($tableGateway);
                    return $table;
                },
                'UtilisateurTableGateway' => function ($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype(new Utilisateur());
                    return new TableGateway('utilisateur', $dbAdapter, null, $resultSetPrototype);
                },
            ),
        );
    }
}

fichier Login\Controller\LoginController.php

Code:

 [lang=php]

namespace Login\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class LoginController extends AbstractActionController
{
    protected $loginTable;
    protected $UtilisateurTable;


    public function indexAction()
    {
        
        return new ViewModel(array(
             'users' => $this->getUtilisateurTable()->fetchAll(),
         ));
    }
    
    public function getUtilisateurTable()
    {
        if (!$this->UtilisateurTable)
        {
            $sm = $this->getServiceLocator();
            $this->UtilisateurTable = $sm->get('Utilisateur\Model\UtilisateurTable');
        }
        return $this->UtilisateurTable;
        
    }
}

L'erreur que j'ai est : Zend\ServiceManager\Exception\ServiceNotFoundException
Message:
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for Utilisateur\Model\UtilisateurTable



Merci d'avance

Dernière modification par ach-87 (29-03-2014 12:31:06)

Hors ligne

 

#2 29-03-2014 13:00:24

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

Re: Utiliser un factory d'un module dans le controller d'un autre module

Salut c'est bizarre effectivement ! As-tu bien activé les 2 modules dans ton fichier application.config.php ?

Hors ligne

 

#3 29-03-2014 13:29:41

ach-87
Nouveau membre
Date d'inscription: 29-03-2014
Messages: 2

Re: Utiliser un factory d'un module dans le controller d'un autre module

Salut, j'ai honte sad le module Utilisateur n'était pas activé. Je suis désolé de t'avoir dérangé et merci beaucoup ça fonctionne nickel 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