2010-11-28 2 views
2

Je dois énumérer plusieurs éléments qui proviennent d'une source de base de données A et ils sont: team_id, team_name et team_score (traduit à des fins d'explication).php design question - est-ce qu'un assistant aidera ici?

Je dois faire une boucle sur eux, et afficher cette information.

Alors, je l'ai, sur le côté DAO:

public function listOfTeams() 
{ 
    $select = $this->select() 
    ->from(array('t'=>'teams'), array('cod_team','name','score')); 
    return $this->fetchAll($select); 

} 

Sur mon contrôleur d'équipe:

public function listAction() 
{ 
    $teamsDao = new TeamsDao(); 
    $this->view->infoTeam = $teamsDao->listOfTeams();      
} 

Et à la vue:

<?php for($i = 0; $i < 30; $i++): ?> 

    <?php if(isset($this->infoTeam[$i])): ?> 

Maintenant, la chose est , sur chacun de ces éléments énumérés, j'ai besoin d'ajouter plus d'informations.

Cette information ne provient pas directement d'une base de données, mais c'est le résultat de certains calculs.

Prenez par exemple le pourcentage de parties jouées. (traduit);

$totalGamesNumber > 0 ? ($gamesDone*100)/$totalGamesNumber : 0); 

Alors, je dois saisir le nombre total de jeux de la base de données, puis, pour chaque équipe, je dois avoir le nombre de jeux fait, afin que je puisse avoir le pourcentage à afficher.

Le gamesDone $ sont obtenus par:

$gameTeamDao->countGamesPerTeam($gameVo, $teamVo); 

Je suis coincé ici, parce que je ne vois pas où/comment dois-je appeler et faire la méthode de calcul du pourcentage, afin de permettre le pourcentage des jeux terminés pour être présentés avec les autres données. Puis-je avoir de l'aide avec cette boue?

Si vous deviez écrire un assistant pour cela, plus ou moins, à quoi cela ressemblera-t-il?

Merci à l'avance, MEM

PS - Si vous avez besoin de plus amples informations. Je peux fournir. Je pourrais oublier quelque chose qui pour moi est pris, mais cela, pour ceux qui veulent aider, ce n'est pas le cas. Alors, fais le moi savoir. Merci encore beaucoup.

Mise à jour: traduit tous les messages en anglais pour l'amour de l'aide.

+0

veuillez clarifier la question. Pour moi, il n'est pas clair pourquoi vous ne pouvez pas simplement mettre ce calcul dans une aide et le sortir si nécessaire. En outre, cela utilise ZF, non? – Gordon

+0

Oui c'est. Oui, je peux mettre cette information dans un assistant. Ma question est la suivante: est-ce l'endroit approprié? Si oui, quelles informations spécifiques devrais-je transmettre à cet assistant? Merci beaucoup. – MEM

+0

@Gordon: Pour ajouter d'autres termes, si vous ou quelqu'un d'autre pouvait voir cela, et que vous remarquiez qu'un assistant serait une bonne chose à faire, à quoi ressemblerait l'assistant? – MEM

Répondre

7

Puisque vous utilisez ZF, vous pouvez effectuer tous ces calculs dans la classe de la ligne du tableau. Voici comment. Supposons que la classe de votre équipe s'appelle Application_Model_DbTable_Teams.

class Application_Model_DbTable_Teams extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'teams'; // table name 
    protected $_id = 'teamId'; // table primary key 

    // rows returned by fetchAll() will be of this class 
    protected $_rowClass = 'Application_Model_DbRow_Teams'; 

} 

Ensuite, vous devez créer la classe Application_Model_DbRow_Teams où vous mettrez les calculs supplémentaires

class Application_Model_DbRow_Teams extends Zend_Db_Table_Row_Abstract 
{ 
    public $percentGamesDone; 

    public function init() 
    { 
     // This method gets called automatically by ZF when you instantiate a new 
     // object from this class 
     // This is where you will put your extra calculations, 
     // like percentage games done, etc 
     $this->percentGamesDone = $this->getPercentGames(); 
    } 

    public function getPercentGames() 
    { 
     $calculation = 3; // replace this with real data 
     return $calculation; 
    } 
} 

Une fois que vous avez fait cela, vous pouvez simplement utiliser l'une des déclarent propriétés de la ligne (comme percentGameDone) directement à partir de la vue, car ils seront calculés correctement lorsque vous instancier les lignes.

+1

J'ai oublié de mentionner une chose: Ces calculs appartiennent au modèle, pas aux assistants de vue. – Julian

+0

@Julian: les classes sont déjà créées. Ils étendent tous les deux Zend_Db_Table_Row_Abstract et ils sont appelés: class TeamDao et class GameDao (est-ce un problème par rapport à votre suggestion d'implémentation?). – MEM

+0

J'utilise aussi des getters et des setters, et peut-être que je peux passer un $ publicGamesDone; par une VO? – MEM