Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-03-2008 06:53:18

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

[résolu] Possibilité de passer une fonction à une vue ?

Bonjour,

J'ai créer une fonction dans une classe Client étendue de Zend_Db_Table_Abstract afin de ne pas surchager les opérations dans la vue.

Mais pour que la vue puisse utiliser cette fonction il faut que je lui passe un objet Client, chose que je n'ai pas forcément envie. L'utilisateur doit avoir accès qu'à cette fonction. D'ou ma question, peut-on passer une fonction à une vue ?

En fait, je ne sais pas ou placer cette fonction qui joue le rôle d'un accesseur complexe (faisant des appels à d'autres fonctions de la classe, en fonction static ça ne passera pas). Dans la logique il faut que je l'écrive ou ? Cet accesseur doit être accessible facilement par un ou deux controlleurs et plusieurs vues.

Merci

Dernière modification par whitespirit (14-03-2008 11:39:48)

Hors ligne

 

#2 13-03-2008 08:56:12

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu] Possibilité de passer une fonction à une vue ?

Bonjour,

Théoriquement, l'affichage ne doit pas se retrouver dans le modèle. Donc fonction d'affichage ne devrait pas se retrouver dans ta classe Client.
Cela dit dans certains cas, c'est tellement pratique qu'on le fait quand même. Dans ce cas, dans ton controlleur, tu appelle la fonction de ton objet et tu envoies le résultat dans ta vue et c'est bon... On est loin du purisme du MVC, mais c'est une dérogation assez courante.

Une méthode plus "puriste" consisterait à faire un viewHelper. Tu l'initialises en envoyant ton objet dedans et ensuite tu l'appelles dans ta vue pour faire le traitement d'affichage qui va bien.
Ca revient un peu à envoyer ton objet dans ta vue, sauf que les viewHelpers sont toujours un peu à cheval entre le controlleur et la vue. Donc finalement, tu restes dans l'esprit du ZF... Le jour où ton modèle change, il faut changer ton viewHelper, mais par contre ta vue et ton controlleur restent inchangés, on a bien quelque chose d'assez décorrélé.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 13-03-2008 10:18:52

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [résolu] Possibilité de passer une fonction à une vue ?

En fait, je ne fais pas d'affichage dans le modèle, mais je récupère un tableau contenant des infos à afficher dans des tables à ma table Client. Il ne s'agit pas d'une table Client mais j'ai une table USER et une table ROLE qui est liée à USER.

Voici un extrait du code de ma vue, tu vas comprendre tout de suite :

Code:

    <?php foreach($this->usersRowSet as $usersRow) : ?>
    <tr>
        <td><?php echo $this->escape($usersRow->NOM);?></td>
        <td><?php echo $this->escape($usersRow->PRENOM);?></td>
        <td><?php //-- C'EST ICI QUE J'UTILISE UNE FONCTION DANS MA TABLE --//
                $tabRole = $this->table_role->getTabID($usersRow->ID_ROLE);
                echo $this->escape($tabRole[$usersRow->ID_ROLE]);?></td>

    <?php endforeach; ?>

Dans ces deux lignes

Code:

                $tabRole = $this->table_role->getTabID($usersRow->ID_ROLE);
                echo $this->escape($tabRole[$usersRow->ID_ROLE]);?></td>

La première ligne me permet de récupérer un tableau contenant la liste de mes rôles (se trouvant dans la table Role) de type "[ID_ROLE]=>[NOM]". La seconde affiche le rôle écris le rôle pour l'utilisateur en cours traité par foreach : $usersRow.

Dans ma vue, je ne sais pas comment faire pour récupérer une valeur dans la table liée sans passer par une requête de ce type.

Dernière modification par whitespirit (13-03-2008 10:22:07)

Hors ligne

 

#4 13-03-2008 12:43:38

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu] Possibilité de passer une fonction à une vue ?

Salut,

En fait théoriquement (là encore il faut être puriste), tu ne devrais pas trimballer d'objets métier dans ta vue. Dans ta vue, tu ne devrais avoir que des tableaux simples comme valeurs d'entrées, sinon tu couples ta vue avec ton modèle...
C'est le controlleur qui devrait assurer le découplage en créant un tableau à partir de ton objet.

Dans ton controlleur tu devrais avoir un truc du genre :

Code:

$displayUserList = array();
foreach ($this->usersRowSet as $usersRow) {
  $tabRole = $table_role->getTabID($usersRow->ID_ROLE);
  $role =$tabRole[$usersRow->ID_ROLE];
  $displayUserList[] = array(
    "NOM" => $userRow->NOM,
    "PRENOM" => $userRow->PRENOM,
    "ROLE" => $role
  );
}
$this->view->userList = $displayUserList;

et ensuite dans ta vue :

Code:

    <?php foreach($this->usersList as $usersRow) : ?>
    <tr>
        <td><?php echo $this->escape($usersRow["NOM"]);?></td>
        <td><?php echo $this->escape($usersRow["PRENOM"]);?></td>
        <td><?php echo $this->escape($usersRow["ROLE"]);?></td>
    </tr>
    <?php endforeach; ?>

A+, Philippe

PS : si ton projet fait 3 classes, ne te prends pas la tête avec ça... Si c'est un gros site avec plein de fonctionnalités et des évolutions à venir, c'est un bon reflexe à prendre...


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 14-03-2008 06:31:39

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [résolu] Possibilité de passer une fonction à une vue ?

Tu as raison !!!! En fait, quand j'ai commencé sous ZF, j'ai suivi les tutos basique mais maintenant je commence à bien cerner ce framework et je me rends compte de plein de chose. Mais ce que je me rends compte, c'est que dans mes controlleurs, le code contenant les action est très long. Entre le IF ($this->_request->isPost()) et le ELSE, mon code est très très long : préparer mes formulaires, récupérer les variables.

J'ai une vingtaine de tables environs, donc une appli assez complexe. Pour le moment j'ai juste créer les vues de manière basique histoire d'afficher qq chose, je peux encore modifier. En fait, tu gardes la vue simplement pour faire des echo ? Tu y fais d'autres traitement ?

Hors ligne

 

#6 14-03-2008 10:15:07

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu] Possibilité de passer une fonction à une vue ?

Oui, en gros je n'utilise la vue que pour des echos. Parfois pour des traitements hyper simples liés à l'affichage :
- changer la couleur une ligne sur deux dans un tableau
- afficher un message pour dire qu'il n'y a pas de réponse à une requête (si tableauVide alors echo "pas de réponse" sinon j'affiche mon tableau)
...

J'ai de temps en temps des traitements hyper simples et directement dédiés à l'affichage, mais ça ne va pas plus loin...

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

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