Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 31-01-2013 23:40:02

mtcocktail
Membre
Date d'inscription: 20-09-2012
Messages: 71

utilsation d'un servicemanager entre deux modules

Bonsoir tous le monde,

J'essaye d'utiliser la déclaration d'un objet type tablegateway présente dans un module dans un autre module de l'application.

En gros dans mon premier module j'ai dans Module.php la fonction getServiceConfig() dans les factories :

Code:

     'Module1\Model\ObjetTable' =>  function($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $table     = new ObjetTable($dbAdapter);
                    return $table;
                }

Que j'appelle sans problème dans mon controlleur :

Code:

 $ObjetTable = $this->getServiceLocator()->get('Module1\Model\ObjetTable');

Et je me demande si ça serait possible dans un autre module que j'utilise cet objet. Je fais donc dans le controlleur de mon module2 :

Code:

 $ObjetTable=$this->getServiceLocator()->get('Module1\Model\ObjetTable');
 $mesobjet=$ObjetTable->fetchAll();
  return new ViewModel($mesobjet);

Alors ça l'air de plutôt bien marcher car dans $mesobjet j'ai bien un objet du type : object(Zend\Db\ResultSet\ResultSet)

Par contre quand je le passe à ma vue j'obtient le message d'erreur :

   

Code:

Rows as part of this DataSource, with type object cannot be cast to an array

Ce devrait être possible de faire marcher ça non ?

Hors ligne

 

#2 01-02-2013 09:20:21

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

Re: utilsation d'un servicemanager entre deux modules

Le service manager est indépendant des modules donc tu peux récupérer tout n'importe où dans n'importe quel module. Le problème que tu as dans ta vue viens d'autre part wink

Hors ligne

 

#3 01-02-2013 10:23:06

mtcocktail
Membre
Date d'inscription: 20-09-2012
Messages: 71

Re: utilsation d'un servicemanager entre deux modules

Bah ce qui est fou c'est que dans la vue je n'utilise même pas ma variable $mesobjet que je viens de lui passer. L'erreur remonte au niveau du passage de la variable dans la vue. Comme si la vue controler le fait qu'il puisse y'avoir un toArray ? ... hmm

Et chose marrante si je rajoute une fonction toArray() dans mon objet Model (qui est lié à mon TableGateway) bah plus d'erreur. Mais bon mon objet est vide...

Hors ligne

 

#4 01-02-2013 10:29:51

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

Re: utilsation d'un servicemanager entre deux modules

Tu dois avoir une coquille quelque part tu es bien sûr que tu ne l'utilises pas ?

Hors ligne

 

#5 23-02-2013 16:03:55

mtcocktail
Membre
Date d'inscription: 20-09-2012
Messages: 71

Re: utilsation d'un servicemanager entre deux modules

Je reviens sur ce vieux post pour donner la solution à l'erreur :

Code:

  Rows as part of this DataSource, with type object cannot be cast to an array

J'ai fait une simple erreur grossière dans le code.

Code:

 $ObjetTable=$this->getServiceLocator()->get('Module1\Model\ObjetTable');
 $mesobjet=$ObjetTable->fetchAll();
  return new ViewModel($mesobjet);

Faut pas oublier de passer un array à la vue !!!!! IMBECILE que je suis ... et encore je suis polie.

Donc voici le bon bout de code

Code:

 $ObjetTable=$this->getServiceLocator()->get('Module1\Model\ObjetTable');
 $mesobjet=$ObjetTable->fetchAll();
  return new ViewModel(array('mesobjet'=>$mesobjet));

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