Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-11-2012 23:01:27

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

Récupérer Service Manager

Bonjour,

Voila j'ai encore un peu de mal à prendre les bonne décisions et comprendre le service manager. Depuis le Controller je récupére un service manager. Ca ok, ça marche.

Par contre j'aimerais récupérer l'adaptater de ma DB qui est déclaré en Service dans une classe métier.

Car pour chaque objet A je veux avoir une méthode me permettant de récupérer un objet B qui lui est lié.

Donc je passe à ma vue un resultset d'objet A, mais je veux pouvoir dans ma vue appeller la méthode de A me retournant l'objet B qui lui est lié.

Je sais pas si je suis claire sad

Hors ligne

 

#2 24-11-2012 14:08:24

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Récupérer Service Manager

J'ai déjà répondu à cette question. La réponse est dans ce forum et facilement trouvable.


22914720

Hors ligne

 

#3 24-11-2012 16:10:45

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

Re: Récupérer Service Manager

si c'est le topic que je pense, j'ai vu mais j'ai pas eu l'impression que la réponse correspondait. Je vais de ce pas compléter le thread smile

En espérant que ce soit celui là : http://www.z-f.fr/forum/viewtopic.php?id=8208

Dernière modification par mtcocktail (24-11-2012 17:33:41)

Hors ligne

 

#4 30-11-2012 10:14:29

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

Re: Récupérer Service Manager

Je reviens un peu sur mon problème car je ne trouve pas la solution.

Je pourrais injecter l'adaptater dans ma classe à partir du controller, mais dans ce cas là ce n'est pas possible.

On a les classe d'abstraction tablegateway qui font les requête et me renvoie un resultset associé à mon objet métier.

Je passe ce resultset à ma vue.

Dans ma vue je fais une boucle sur ce resultset qui via l'iterator va m'instancié mon objet métier. et c'est dans cette objet métier que j'aimerais faire une requête. Ou alors dans cette boucle qui est dans ma vue, pour chaque element instancier un autre element. Mais comme je ne suis plus dans contrôleur je ne voies pas comment passer mon adaptater.

J'immagine que je ne suis pas très clair sad

Hors ligne

 

#5 30-11-2012 10:20:30

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

Re: Récupérer Service Manager

Non ce n'est pas très clair. Ce que je vois à première vue c'est qu'il y a un problème dans les données que tu envoies à ta vue car tu ne dois pas faire de requête dans celle-ci (enfin c'est déconseillé ou alors via des view helpers qui font appel à des services ^^) !

Hors ligne

 

#6 30-11-2012 10:23:20

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

Re: Récupérer Service Manager

J'essaye de formuler alors un exemple plus simple smile

Comment tu ferais si tu dois afficher dans une vue :

Une liste d'objet A, et pour chaque objet A de cette liste la liste d'objet B associé à A.

Hors ligne

 

#7 30-11-2012 10:41:49

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

Re: Récupérer Service Manager

Via un getter dans l'objet A vers l'objet B, enfin avec Doctrine c'est comme ça que l'on fait. Dans la requête on récupère tout ce dont on a besoin via des jointures etc ... donc tout est "chargé" dans la couche service et dans la vue on récupère simplement un gros objet qui contient l'objet A et l'objet B avec une référence de A vers B via un getter.

Le problème que tu vas rencontrer si tu fais la requête dans la boucle c'est que si tu as 10 éléments et que pour chacun de ces éléments tu veux récupérer l'élément B tu feras 10 requêtes, si tu en as 100 => 100 requêtes et là ça fait vraiment beaucoup. Donc tu dois trouver une façon de faire pour charger tous les éléments B d'un coup en même temps que les éléments A.

Hors ligne

 

#8 30-11-2012 10:49:41

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Récupérer Service Manager

je veux pouvoir dans ma vue appeller la méthode de A me retournant l'objet B qui lui est lié.

En simplifiant à l'extrême, dans ton objet A :

$this->B = new B($A->idDeB);

ou

public function getB($A->idDeB){...}

Où est le problème dans ta vue ?

$A->B->proprieteDeB

ou

$A->getB()->proprieteDeB


22914720

Hors ligne

 

#9 30-11-2012 10:55:08

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

Re: Récupérer Service Manager

oui pour la simplification à l'extreme smile Et justement dans mon objet B comment je fais pour binder les variable de B avec les valeurs de la base. Je pourrais faire une requête, mais dans le constructeur de B je n'ai pas accès à l'adaptater disponible dans le service manager de l'application.

Orkin : je suis d'accord sur le problème de trop de requête, mais ça veut dire ne pas utiliser de tablegateway, et tous refaire non ?

Hors ligne

 

#10 30-11-2012 11:02:04

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Récupérer Service Manager

mtcocktail a écrit:

mais dans le constructeur de B je n'ai pas accès à l'adaptater disponible dans le service manager de l'application.

Si justement dans le topic précité plus haut.


22914720

Hors ligne

 

#11 30-11-2012 11:50:50

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

Re: Récupérer Service Manager

mtcocktail a écrit:

Orkin : je suis d'accord sur le problème de trop de requête, mais ça veut dire ne pas utiliser de tablegateway, et tous refaire non ?

Je ne sais pas j'utilise Doctrine et on peut faire ce genre de chose très facilement.
Donc essai de voir la solution de Bouks.

Hors ligne

 

#12 30-11-2012 11:52:13

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

Re: Récupérer Service Manager

Donc l'idée du toptic précité c'est d'avoir sa propre class adapter et changer dans le code l'appel à l'adapter automatique qu'on a avec :

$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');

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