Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour, ma question va peux être sembler un peu bizarre mais il n'est pas forcément évident pour un débutant de savoir comment faire certaines choses.
En effet pour l'application que je développe avec le Zend Framework (1.11) je vais avoir besoin d'utiliser une fonction "externe" pour afficher mes news sur la page d'accueil.
J'ai donné l'exemple de la news mais ça pourrait être quelque chose qui doit être accessible partout mais dont je n'ai pas besoin tout le temps. Par exemple : faire un calcul (j'ai pas d'autre idées en tête qui pourraient s'apparenter à ce principe, j'éditerais si j'en ai qui me reviennent).
Je vais tenter d'être le plus clair possible. Je pense avoir plusieurs solutions pour faire ça mais je ne parviens pas à trouver laquelle est la meilleure (selon les bonnes pratiques).
- Directement faire le traitement dans le contrôleur de ma page d'accueil. Le problème c'est que je devrais réécrire le code pour récupérer la news et l'afficher si j'ai besoin de le mettre ailleurs
- Utiliser un helper de vue, l'avantage que j'y vois c'est que c'est facilement réutilisable.
- Éventuellement faire une classe avec plusieurs fonctions dont celle permettant de récupérer les news. (j'y crois pas trop mais sait on jamais)
- Utiliser un plugin (je n'ai pas vraiment bien compris encore à quoi ça servait mais je me dis que ça doit bien servir à quelque chose et j'ai la sensation que ça serait pour faire ça)
- Faire une methode dans mon modèle pour récupérer les news (j'ai l'impression que ça serait vraiment crade et pas du tout MVC de faire comme ça, éventuellement du côté du mapper ou Db_Table si je ne peux pas m'en sortir avec un find() ou fetchAll())
Si on tiens compte des idées que j'ai donné ci-dessus, j'aurai potentiellement 5 façons d'afficher mes news hors je suis persuadé qu'il y a une solution plus performante pour traiter ce genre de chose suivant la situation et c'est là que le Zend Framework est un peu obscure. Je ne parviens pas à savoir (par manque de connaissance encore du framework) quel choix faire (bien que l'idée de la classe à côté ou d'utiliser le modèle me paraissent vraiment pas propre).
J'espère que j'ai pu me faire comprendre et attend avec impatience des précisions à ce sujet. D'avance merci !
Cordialement
Orkin
Hors ligne
Pour moi, dans ta page, les news sont tes données elles sont donc le M du MVC.
Si j'étais toi je créerais une classe dans le modèle pour gérer les news. Par contre ce n'est pas parce que c'est le modèle que cela obligatoirement doit dériver de Zend_Db*.
Ceci évidemment est mon opinion et j'ai peut-être une vision un peu large du modèle, mais personnellement c'est comme cela que je ferais
Hors ligne
Je te remercie Ithier, quelqu'un aurait un autre avis ?
Hors ligne
Pour continuer dans la suite d'Ithier, dans ton controlleur
tu pourrais avoir quelque chose comme :
[lang=php] $modelNews = new Model_News(); $newsList = $modelNews->fetchAll(); // envoi à la vue $this->view->news = $newsList;
Pour envisager la possibilité d'étendre ton appli dans la suite,
tu pourrais inclure une couche Service, qui pourrait se charger d'effectuer
certains traitements si tu veux.
Dernière modification par lesauf (30-12-2011 14:18:26)
Hors ligne
Salut Lesauf, j'utilise déjà cette méthode là à la différence que j'ai 2 types de modèles : des modèles qui représentes mes tables (donc qui étendes Db_Table_Asbtract) et des modèles métier que j'utilise dans mon application via mes contrôleurs.
La seule différence entre ton code et le mien c'est qu'entre mon objet métier et mon modèle Db c'est que j'ai un mapper qui fait la liaison entre la bdd et la partie métier (le mapper fait en réalité un peu plus de choses).
Tu parles d'un point qui m'intéresse fortement et j'aurai aimé que tu développes un peu plus la façon dont on peux implémenter ça, c'est la couche Service. Car j'ai l'impression de déjà utiliser quelque chose de ce genre justement via mon mapper et mes modèles de type entité et ceux de type métier.
Merci d'avance
Orkin
Hors ligne