Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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 :
'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 :
$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 :
$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 :
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
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
Hors ligne
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 ? ...
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
Tu dois avoir une coquille quelque part tu es bien sûr que tu ne l'utilises pas ?
Hors ligne
Je reviens sur ce vieux post pour donner la solution à l'erreur :
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.
$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
$ObjetTable=$this->getServiceLocator()->get('Module1\Model\ObjetTable'); $mesobjet=$ObjetTable->fetchAll(); return new ViewModel(array('mesobjet'=>$mesobjet));
Hors ligne