Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-08-2009 18:15:57

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Utilité des modules

hello,

Au fur et à mesure de lectures j'ai du mal à cerner précisément l'utilité des modules.

Les approches sont diverses en fonction des gens :

Code:

/modules
    /default

Code:

/modules
    /frontend
    /backend

Code:

/modules
    /news
    /blog
    /agenda
    /espaceperso
    / (sans notion de backoffice dans un tel cas)

La dernière semble être celle qui se rapproche le plus de la définition courante d'un module.

Couplée au framework de Zend, m'en vien toutefois un questionnement particulier :

Si dans un espace perso il y a une page qui est sensée présenter cinq news, un mini-agenda et une selection d'articles d'un blog, un tel découpage des dossiers ne poseraient-ils pas problème ?

Plus précisément, est-ce que l'espace perso se chargera de communiquer lui-même avec le modèle pour récupérer les infos et les mettre en forme avec ses propres vues ou l'espace perso déclenchera plusieurs actions des controleurs des autres modules qui lui rappratrieront les vues attendues ?

Dernière modification par Eureka (17-08-2009 18:17:12)

Hors ligne

 

#2 17-08-2009 21:52:10

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: Utilité des modules

Lorsque dans une page quelconque d'un module quelconque, on fait appel à des infos liées à un module particulier, on utilise des aides d'action (actionHelpers).
L'url détermine le module dans lequel on se trouve (sauf cas particuliers de routage).
Prenons par exemple la page d'accueil d'un site de rencontre (module default).
On y trouve la liste des derniers inscrits (appartenant au module membre) et les derniers temoignages des membres (appartenant au module temoignage).
Dans chacun de ces cas il faut écrire une aide d'action.

David

Hors ligne

 

#3 18-08-2009 09:37:31

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Utilité des modules

Merci pour cette réponse smile

Sans transition :

Q.1/ D'un point de vue plus technique, les aides d'actions appellées dans plusieurs modules doivent être dans le dossier du module qu'il concerne fonctionnellement parlant (genre /application/modules/news/controller/action/helper) ou faut-il les remonter d'un niveau (/application/controller/action/helper) ?

Q.2/ Pour l'heure j'avais déjà croisé l'aide de vue 'action', et l'aide d'action 'ActionStack', parles-tu de l'une d'elles, voire des deux ? Si quelqu'un a le temps de présenter un bref exemple fonctionnel je veux bien.

Q.3/ Dans une application où chaque page va devoir regrouper diverses fonctionnalités, quelqu'un a-t-il déjà rencontré des contraintes particulières quant à un découpage de l'application en modules au détriment d'un découpage en modules front/back ou unique (module 'default') ?

Pour ma part je dois pouvoir activer/désactiver des fonctionnalités en temps réel (backoffice), un tel découpage de l'application peut paraître intéressant (ou pas ?).

Dernière modification par Eureka (19-08-2009 15:41:49)

Hors ligne

 

#4 19-08-2009 15:40:56

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Utilité des modules

(suite)

Q.4/ Gérer l'application avec des /modules/ laisse sous-entendre en théorie que ces derniers ont un caractère portable d'une application à une autre non ?

Q.5/ Si globalement la réponse est "Oui" à la question 4/ : dans le cas d'interdépendances entre les fonctionnalités des modules et les pages, n'est-il pas plus judicieux d'avoir :
-> un module défaut qui possède des contrôleurs pour toutes les pages de l'application et qui use d'aides d'<action|vue> pour rapatrier des contenus de chaque autre module.
-> des modules par fonctionnalités (news, blog, ...), qui ne possèderaient que des aides d'action, aides de vues, et éventuellement des contrôleur (qui ne seraient jamais appelés par URL pour afficher une page) qui se contenterait d'injecter leur rendus dans le traitement du contrôleur du module "default" ?

Dernière modification par Eureka (19-08-2009 15:42:18)

Hors ligne

 

#5 19-08-2009 16:20:54

aelyta1
Membre
Lieu: Rouen
Date d'inscription: 29-06-2009
Messages: 98

Re: Utilité des modules

Une réponse succincte à Q1 : pour ma part quand j'ai des aides qui concernent plusieurs modules je les mets dans Library/My/Helper


veni, vidi, riendi
Vive les lapins-antilopes !

Hors ligne

 

#6 19-08-2009 16:24:33

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Utilité des modules

Q5/ Dans le groupe de mot "aide d'action", il y a 2 mots : aide et action. On parle donc d'une assistance au travail de l'action. Le but d'une aide d'action n'est donc absolument pas de réalisé le travaille à la place des actions

Pour moi, un module n'est qu'un répertoire pour mieux classer sont travail (et éviter éventuellement des doublons dans le nom des contrôleur). Les bootstraps de module apporte de l'aide également dans ce classement


----
Gruiiik !

Hors ligne

 

#7 19-08-2009 16:39:14

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Utilité des modules

Merci pour ces nouvelles réponses

@aelyta1 :
(Q1) j'ai plus tendance à mettre dans My/Library/ les classes qui peuvent être génériques à n'importe qu'elle application sous Zend (ou du moins à plusieurs), et dès lors je pense plus que des aides spécifiques à l'application doivent rester dans un sous-niveau quelconque de /application/. Je me trompe peut-être...

@nORKy :
(Q5) je veux bien un exemple argumentatif pour comprendre ton approche : de quelle manière (arbo modules éventuels + controller + helpers... ou autre) tu gèrerais l'affichage d'une page "espace perso" qui contiendrait à la fois : un mini agenda + dernières news du membre + quelques articles de blogs ?

Dernière modification par Eureka (19-08-2009 16:40:07)

Hors ligne

 

#8 19-08-2009 16:45:50

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Utilité des modules

"dès lors je pense plus que des aides spécifiques à l'application doivent rester dans un sous-niveau quelconque de /application/. Je me trompe peut-être..."
Je vois ça de la même façon.


Concernant les modules le coté qui m'échape encore c'est l'orsque tu décide d'avoir des partis backend/frontend pour un module....

Certain font un controller frontend, un controller backend => bof si ton module est assez gros, tout avoir dans 2 fichiers :s

J'ai mis un autre post à ce sujet, j'explore quelques pistes...

Il y a une possbilité d'avoir un dossier dans controllers, exemple :

/monmodule/controller/backend/Article.php => http://domain.com/monmodule/backend_article   pour l'url

Mais bon le "_"  c'est moyen.


Société : Direct Info Service

Hors ligne

 

#9 19-08-2009 17:02:36

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Utilité des modules

@yannux :
Je n'ai pas vraiment encore réfléchit à la séparation backend / frontend. Du moins pour ma part je pense n'avoir qu'un seul controller, qui en fonction de droits permettra l'accès à des fonctionnalités dites de "backend" ou non. Dans le cas d'une séparation réelle des deux je ne sais pas ce qui peut être le mieux.

Concernant l'URL, s'il ne s'agit que d'un problème de "_" cela doit pouvoir se contourner et se régler en définissant une nouvelle route dans l'application, qui se baserait sur un modèle ":module/backend/:controller/:action/*" et qui se chargerait d'instancier le bon contrôleur non ?

Dernière modification par Eureka (19-08-2009 18:21:16)

Hors ligne

 

#10 19-08-2009 17:43:46

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Utilité des modules

Eureka a écrit:

Merci pour ces nouvelles réponses


@nORKy :
(Q5) je veux bien un exemple argumentatif pour comprendre ton approche : de quelle manière (arbo modules éventuels + controller + helpers... ou autre) tu gèrerais l'affichage d'une page "espace perso" qui contiendrait à la fois : un mini agenda + dernières news du membre + quelques articles de blogs ?

Tu as surement choisi un mauvais exemple...

Pas besoin de module pour faire une page perso.

- MyaccountController()
-- indexAction()
--- $this->view->news = getTable('new')->findForUser('XX');
--- $this->view->agenda = $XX;
--- $this->view->blogData = getTable('blog')->findData('XX');

L'action s'occupe de gérer les paramètres éventuels (id utilisateur; nombre de news à affiché, ect...)
Je rajouterai surement un helper de vue pour le calendrier (mais qui reçoit les données venant du controller !)
La vue index.phtml s'occupe de mettre en forme les données (c'est son job)
Éventuellement, si tu veux réutilisé des "widgets" pour chaque zone, tu découpes index.html en aide de vue (qui prennent en paramètres leurs données !)


----
Gruiiik !

Hors ligne

 

#11 19-08-2009 18:06:32

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Utilité des modules

@nORKy
(Q5)
Je ne voyais pas du tout cela ainsi, et mon exemple de page perso est bien celui qui me semble représentatif de mon questionnement.


J'aurais plus imaginé que $this->view->news par exemple aurait appelé dans le module /news/ soit une aide d'action ou une action d'un contrôleur... bref que le coeur du traitement se ferait dans le module /news/ quitte à lui passer des paramètres.
De même pour agenda et blog.

D'autant plus que si le mini agenda (ou news, ou blog) doit être affiché sur plusieurs pages, j'aurais également imaginé que la récupération des données du modèles ne se ferait pas dans l'action du controleur, afin de pas devoir écrire le même code dans X contrôleurs mais dans un helper.

J'ai hâte que les notions de plugins/helpers/modules me deviennent intuitives à la première réflexion, ce qui n'est pas vraiment le cas... d'où toutes ces questions.

Hors ligne

 

#12 20-08-2009 14:17:42

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Utilité des modules

pour les news ? tu veux traité quoi ?? Généralement, les models ont déjà les fonctions de récupartion codées.
Pour ton affichages par pages, je suppose que tu parles de changé uniquement la "page" de news. Donc, tu fais appels à JS, donc à Ajax, donc, la tu as en effet un controller dédié (news/index/page/3)


----
Gruiiik !

Hors ligne

 

#13 20-08-2009 14:37:48

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Utilité des modules

En fait je vois bien les news posséder une vue particulière en plus du model qui permet de les récupérer, et que le controleur ou l'aide qui injecte ces données dans la vue spécialisée pour les news soit dans le /modules/news/.
De même pour l'agenda, que le traitement gérant l'affichage de l'agenda (vue à utiliser) soit dans /modules/agenda/

Si en Ajax on fait appel à un contrôleur de /modules/news/, pourquoi lors de l'affichage d'une page qui contient un bloc news on ne ferait pas appel à un contrôleur du même module du coup ?

J'aimerais trouver la méthode la plus apte à pouvoir activer/désactiver des fonctionnalités (modules ?) en faisant en sorte qu'il n'y ait vraiment que peu de traitement à se promener au travers des différents /modules/ (voir aucun si possible !)

Hors ligne

 

#14 20-08-2009 16:45:15

tomtom
Membre
Lieu: Strasbourg
Date d'inscription: 07-01-2009
Messages: 14

Re: Utilité des modules

hello

j'utilise pour faire ces genre de "widget" des aides de vues (par ex pour afficher les dernieres news sur la page d'acceuil) :

Code:

<?= $this->lastNews() ?>

J'ai donc une aide de vue dans mon module news (modules/news/views/helpers/lastNews.php, il faut bien s'assurer que ce dossier est pris en compte dans la recherche des aides de vue)
Cette aide de vue s'occupe de recuperer les données dont elle a besoin et renvoie un partial

Code:

return $this->view->partial('partials/last-news.phtml', array('items' => $item));

Ici l'aide de vue joue un peu le role du controlleur puisq'elle va invoquer le model pour recuperer ce dont elle a besoin, ce n'est peut etre pas tres propre à ce niveau la mais ca permet de tout garder dans le module et de simplement invoquer l'aide si on en a besoin ailleurs.

Hors ligne

 

#15 20-08-2009 17:34:50

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Utilité des modules

Intéressant ! C'est comme ça que je concevais la modularité (sans savoir si c'était la manière la plus judicieuse ou s'il y avait des alternatives plus propres / pratiques)

Niveau propreté, ne faudrait-il pas coupler l'aide de vue à une aide d'action. Cette seconde se chargerait de récupérer les données et de les transmettre à $this->view->news et dans la vue principale l'aide de vue serait appelée par le biais de $this->lastNews($this->news) pour rendre la vue avec les données réceptionnées. Séparation plus stricte des traitements (peut être qu'il y a mieux, je ne sais pas)

Hors ligne

 

#16 21-08-2009 11:52:18

tomtom
Membre
Lieu: Strasbourg
Date d'inscription: 07-01-2009
Messages: 14

Re: Utilité des modules

effectivement l'utilisation d'une aide d'action serait sans doute plus "propre" question mvc mais cela implique une deuxième "dépendance" vers le module à appellé (1 fois ds le controller et 1 fois dans la vue) ce que je voulais éviter

pour pas se casser la tete il y aurait aussi l'aide de vue action mais j'ai cru comprendre qu'il vallait mieux l'éviter pour des question de perf (cycle complet du mvc ZF pour juste rendre un cadre ...)


Pour revenir un peu sur le reste des questions :
- pour moi chaque module doit etre le plus indépendant possible des autres pour pouvoir facilement en ajouter/supprimer suivant le projet
- j'ai un module User qui est présent sur chaque projet (login etc...)
- certaines partie de ce module peuvent dépendre de la présence d'autre module, par exemple si un utilisateur peut s'inscrire et aller sur sa page /moncompte cette page va dépendre des autres modules (abonnement/désabonnement a la newsletter, suivi des commandes).
- Pour réalisaer cela sans avoir a modifier le code du module user, je créer dans les autres modules qui en ont besoin un plugin Users qui définit tout un tas de method qui vont etre appellée dans le module user; j'enregistre ces plugins dans le front controller au niveau du bootstrap du module

Exemple :

Action Helper pour récuperer les plugins "Users" ayant été enregistrés

Code:

class Etic_Controller_Action_Helper_UsersPlugins extends Zend_Controller_Action_Helper_Abstract
{
  public function direct() {
    $fc = Zend_Controller_Front::getInstance();
    $usersPlugins = array();

    foreach ( new DirectoryIterator(APPLICATION_PATH .'/modules/') as $module ) {
      $pluginName = ucfirst($module->getFilename()) .'_Plugin_Users';
      if ( $module->isDir() && ! $module->isDot() && $fc->hasPlugin($pluginName) ) {
        $usersPlugins[] = $fc->getPlugin($pluginName);
      }
    }

    return $usersPlugins;
  }
}

Le controller du module user

Code:

public function indexAction() {
    $this->view->title = 'Mon Compte';

    $this->view->usersPlugins = $this->_helper->UsersPlugins();
  }

La vue du module Users

Code:

<div id="menuClient">

  <p>
    <a href="<?= $this->baseUrl ?>/users/edit" title="Modifier mes coordonnées">
      Modifier mes coordonnées
    </a>
  </p>

  <p>
    <a href="<?= $this->baseUrl ?>/users/passwd" title="Modifier mon mot de passe">
      Modifier mon mot de passe
    </a>
  </p>

  <?php foreach ( $this->usersPlugins as $plugin ) : ?>

    <?= $plugin->userAccount($this) ?>

  <?php endforeach; ?>
  
</div>

Le plugin du module newsletters

Code:

class Newsletters_Plugin_Users extends Zend_Controller_Plugin_Abstract
{
  public function userAccount($view) {
    return $view->partial('partials/userAccount.phtml', 'newsletters');
  }
}

Le partial du module newsletters

Code:

<p>
  <a href="<?= $this->baseUrl ?>/users/newsletter/" title="Abonnement Newsletter">
    Abonnement à la newsletter
  </a>
</p>

J'pense qu'il doit y avoir moyen d'améliorer pas mal de choses (surtout pour des cas plus compliqués que afficher un lien) mais pour l'instant ca répond assez bien a mon besoin
Chez moi pour l'instant il n'y a pas d'histoire d'activation ou non du module, soit il est présent physiquement soit non.

j'espere que ca pourra aider

Hors ligne

 

#17 21-08-2009 16:36:49

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Utilité des modules

Je vais réfléchir à cela et en étudier un peu le fonctionnement et je te ferais part de ce que j'en pense dans la foulée, histoire de confronter les avis (s'il y a lieu du moins !).

Juste en attendant, à la lecture du code de ton helper (si je l'ai bien interprété) ne serait-il pas moins gourmand d'opter pour cette approche (sans parcours de l'arborescence) ? :

Code:

        $modules = array_keys($fc->getControllerDirectory());
        foreach ($modules as $module ) {
            $pluginName = ucfirst($module) .'_Plugin_Users';
            if ($fc->hasPlugin($pluginName)) {
                $usersPlugins[] = $fc->getPlugin($pluginName);
            }
        }

Hors ligne

 

#18 21-08-2009 17:07:20

Eureka
Membre
Date d'inscription: 18-07-2009
Messages: 81

Re: Utilité des modules

J'ai une petite question, d'un point de vue purement "logique Zend", vis à vis de ton utilisation des plugins : étant donné qu'ils servent à injecter du contenu dans une vue, ne leur as-tu pas affecté un rôle que tu aurais tout aussi bien pu ("logiquement dû", même) affecter à une aide de vue ? (avec exactement le même système sauf que l'helper ne récupèrerait pas des plugins mais des aides de vues)

Hors ligne

 

#19 22-08-2009 00:47:08

tomtom
Membre
Lieu: Strasbourg
Date d'inscription: 07-01-2009
Messages: 14

Re: Utilité des modules

Pour le premier message effectivement c'est surement plus efficace que mon parcours de l'arborescence

Pour le 2eme, dans l'exemple que j'ai donné le plugin ajoute du contenu à la vue, mais il peut aussi avoir des fonctions qui servent à autre chose : exemple dans mon module shop le plugin Users va modifier le formulaire d'inscription parce que pour une boutique en ligne on a besoin de plus d'info que pour un forum par exemple; il va donc aussi en plus modifier la facon dont les données sont enregistrées etc ...)

Il y a un certains nombre de point d'entrée dans le module user (ces points correspondent aux fonctions qui vont etre définies dans le plugin : setupForm, processRegister, processLogin, userAccount ....) pour certains ca donne lieu a un affichage, d'autre un traitement ...

Pour l'instant ca marche pas trop mal dans mon utilisation mais je pense qu'avec bcp de modules qui utilisent ces points d'entrées ca doit vite montré ses limites ... j'ai mis ca en place y a pas longtemps donc loin d'etre optimisé encore, votre avis m'interesse donc bcp

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