2010-12-06 41 views
1

J'ai une vue qui boucle sur une table de base de données renvoyant des informations sur les chiens.Exemple d'utilisation de la conception de Zend Helper

Voici le contrôleur:

public function listAction() 
{ 
    $dogDao = new DogDao(); 
    $this->view->infoDog = $dogDao->retrieveDogInfo(); 
} 

Sur le point de vue que je peux récupérer des informations de chien comme ceci:

<?php for($i = 0; $i < 30; $i++){ ?> 
if(isset($this->infoDog[$i])){ 
    $dog = $this->infoDog[$i]; 

Cela fonctionne très bien.

J'ai maintenant besoin d'ajouter des informations spécifiques au chien, mais cette information sur le chien n'est pas une information que je peux obtenir à partir de la table Infos générales, elle nécessite quelques jointures et la récupération d'un nombre à la fin.

public function retrieveVerySpecificInformation($dogId) { 

return $numberSpecificForThatDog 

}; 

I (crois) je besoin d'une aide qui fait ces calculs et ma question est la suivante:

je devrais appeler cette aide sur la vue où le pour oui réside? Mais comment puis-je connecter ces informations d'une manière que je reçois pour chien donné A, les deux: L'information générale de chien et ce numéroSpécifique pour ce chien particulier A? Je veux dire, comment pouvons-nous intégrer correctement l'assistant ici?

Puis-je avoir de l'aide, s'il vous plaît?

Merci à l'avance, MEM

Répondre

1

Vous pouvez appeler l'aide de vue devrait aimer ce

<?php echo $this->displayDog('A', 'black'); ?> 

Et votre aide de vue devrait être comme

class Zend_View_Helper_Dog 
{ 
    public function displayDog($type, $color) 
    { 
     $dog = new Model_DbTable_Dog(); 
     return $dog->getDog($type, $color); 
    } 
} 

Il est OK aide de vue appel à partir d'une boucle pour deux opérations de base de données, MAIS comme vous faites une requête db personnalisée pour chaque chien (30 requêtes ne sont pas RECOMMANDÉ)

Recommandation

Vous devriez chercher toutes les informations de votre besoin avec votre contrôleur et le transmettre à votre point de vue, qui peut être costumé plus tard en utilisant une aide de vue.

public function listAction() 
{ 
    this->view->infoAllDog = $dogDao->retrieveAllDogs(); 
    // including joined info + all dogs you may need in your view 
+0

Je suis d'accord avec votre recommandation. Ainsi, retrieveAllDogs() aura toutes les informations retournées? La question est: Comment puis-je joindre des données à partir de deux requêtes différentes et chacune avec beaucoup de jointures, sur une seule méthode? Peut-être devrais-je utiliser deux méthodes, et une pour les mettre ensemble? - Pouvez-vous s'il vous plaît mettre à jour votre recommandation pour faire face à une situation similaire? Merci beaucoup d'avance. – MEM