Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-01-2008 13:41:11

JrM
Nouveau membre
Date d'inscription: 20-01-2008
Messages: 9

[Résolu] Helpers ???

Bonjour à tous,

Je n'ai pas bien compris la notion de helpers avec le Zend Framework, est ce une notion importante du zf, avez vous des exemples sous la main ou une bonne explication smile ?

Merci.

Dernière modification par JrM (23-01-2008 13:41:59)

Hors ligne

 

#2 21-01-2008 13:47:37

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Résolu] Helpers ???

C'est une notion très importante et très utile.
Il y a 2 type de helpers. Les helpers de vue et les helpers d'action.
Un helper, c'est grosso modo un bout de code qui sera disponible quelque soit la vue ou le controlleur (suivant le type du helper) dans lequel tu te trouve.

Imagine que tu souhaites avoir un helper de vu qui te format un titre. Tu fais un helper de vue nommé H1 et dans n'importe quelle vue, tu pourra faire echo $this->H1("mon titre")

Ca te permet de mutualisé du code. C'est simple a mettre en œuvre, très pratique et très efficace.

Hors ligne

 

#3 21-01-2008 17:29:25

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Helpers ???

Pour exemple, j'ai perso des helpers tout bete pour générer des tags html comme $this->a(href, innerHTML=null, attrs) ou même style pour les images. J'en ai un qui me permet de générer des menus (à base de ul li imbriqués...).
Ca peut être très utiles pour des codes répétitifs.

Hors ligne

 

#4 21-01-2008 20:19:41

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [Résolu] Helpers ???

Mais c'est des traitement en plus coté serveur, je pense que c'est mieux d'ecrire ca en statique non ? Sauf bien sûr dans le cas d'un gros menu ca peut etr einterressant.
Est ce que c'est négligeable ces traitements ?


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#5 22-01-2008 08:35:50

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Résolu] Helpers ???

Le coût de ces traitements au regard du coût du modèle MVC du ZF est négligeable.
Maintenant, une vue, ça se cache. Soit totalement si la page le permet, soit partiellement sinon, c'est à dire que chaque sous-partie de la page qui peut être cachée le sera.
Par exemple, la plus part du temps, un menu peut être caché, et  il est souvent intéressant de construire le menu via les infos du back office, d'où la construction via php.

D'une manière générale, quand ce que tu gagnes en souplesse coté code, tu le paies en perf. C'est un juste équilibre.
Un simple découpage de fichier type template se paie au prix d'include, soit des IO (c'est le prix fort). D'un autre coté, tu gagnes des heures de dev ou maintenance que tu peux mettre au service de l'optimisation. Une fois que tu as mis au point un modèle performant, tu as le meilleurs des 2 mondes...

Imagine que tu as un helper pour afficher les médias (img, flash, pdf etc...). La gestion du code d'affichage des médias est donc centralisé. Demain on t'annonce, tu dois gérer un serveur de médias externe type AKAMAI pour tous les médias images de plus de 10k. Tu modifie ton helpers. c'est fini. Tu ne touche pas au site.
Plus simplement. Admettons que tu ne gérais pas systématiquement le tag ALT dans les images. Demain, on te dis tu dois etre accéssible bronze ou conforme w3c. Le tag alt est obligatoire. Tu modifie ton helper, c'est fini. Sinon, il faut rechercher partout dans le code ou tu affiche une image sans alt... Si tu as un site qui fait 500 pages, c'est une journée de boulot super intéressante qui s'annonce.

Dans mon dernier site, j'ai 36 views helpers et 6 action helpers.
Les helpers peuvent aussi être vue comme une couche d'abstraction d'accès à une bibliothèque ou fonctions. Le jours ou tu changes ta bibliothèque, tu adaptes ton helper, tu touches pas au code coté vue.

Un autre intérêt du helper, c'est qu'il ne coûte que lorsque tu t'en sert. A contrario d'un grosse librairie qui inclut plein de fonctions, même si tu n'utilises qu'une des fonctions de la librairie, tu as probablement inclut une grosse partie de code dont tu n'as pas forcement besoin dans la page en cours.

Hors ligne

 

#6 22-01-2008 10:01:12

JrM
Nouveau membre
Date d'inscription: 20-01-2008
Messages: 9

Re: [Résolu] Helpers ???

Merci, pour vos réponses c'est en effet interessant les helpers.

Doit on les charger dans les controllers de la même manière que les models : Zend_Loader::loadClass('mon_helper'); ??

Il y a til un site qui regroupe quelques helpers, histoire de ne pas reinventer la roue ?

Hors ligne

 

#7 22-01-2008 10:14:16

TiTerm
Membre
Date d'inscription: 01-07-2007
Messages: 175

Re: [Résolu] Helpers ???

Non, c'est la vue dans le cas des view helper qui s'occupe de les charger. Les appels sont trapper via la magic __call(), si le helper n'est pas connu, il est chargé.

Tu dois juste définir les helper path pour que la vue sache ou chercher les helpers.

Meme fonctionnement pour les action helpers.

Hors ligne

 

#8 22-01-2008 10:24:02

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Helpers ???

Il y a til un site qui regroupe quelques helpers, histoire de ne pas reinventer la roue ?

Ca va pas tarder smile. Je bosse actuellement dessus un site de ressources (ça va pas très vite mais ça viendra)

Hors ligne

 

#9 22-01-2008 12:05:12

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [Résolu] Helpers ???

Merci TiTerm, tu as pris le temps de bien expliqué.
Merci smile


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#10 22-01-2008 13:48:20

JrM
Nouveau membre
Date d'inscription: 20-01-2008
Messages: 9

Re: [Résolu] Helpers ???

Merci pour les explications je vais tester ça !

Hors ligne

 

#11 22-01-2008 15:06:14

JrM
Nouveau membre
Date d'inscription: 20-01-2008
Messages: 9

Re: [Résolu] Helpers ???

Mr.MoOx a écrit:

Il y a til un site qui regroupe quelques helpers, histoire de ne pas reinventer la roue ?

Ca va pas tarder smile. Je bosse actuellement dessus un site de ressources (ça va pas très vite mais ça viendra)

Mr.MoOx, si des fois tu aurais un helper qui gère du XML ( ajout, modif, suppr de noeuds ), je suis preneur smile, sinon je m'y jette !!!

Hors ligne

 

#12 22-01-2008 15:15:15

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Helpers ???

jette toi y smile
Regarde simpleXml (enfin y'a 2 api avec php5 simple et dom)...

Hors ligne

 

#13 23-01-2008 13:41:44

JrM
Nouveau membre
Date d'inscription: 20-01-2008
Messages: 9

Re: [Résolu] Helpers ???

Merci, je m'y jette mais plutôt avec le domdocument smile .

Hors ligne

 

#14 23-01-2008 13:58:49

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Helpers ???

Par contre faut bien comprendre qu'un view_helper n'est là que pour faire des traitements visuels (au final un echo quoi!).
Je ne suis pas sur que la manipulation xml rentre dans ce cas...

Hors ligne

 

#15 28-01-2008 16:36:39

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: [Résolu] Helpers ???

Salut

Je rencontre un gros problème avec les helpers. J'ai suivi le tuto de Kitpages pour intégrer Smarty au ZF, et donc au lieu d'utiliser Zend_View, j'utilise Zend_View_Smarty, une classe que j'ai faite et qui implémente Zend_View_Interface comme dit sur le site et dans la doc.

Le problème survient quand je veux appeler un helper de vue via la méthode magique __call. Dans un controlleur, quand je fais $this->view->monHelper(), ZF va chercher dans Zend_View_Smarty::monHelper(), qui n'existe évidemment pas... J'ai donc voulu ajouter un répertoire d'helpers avec addHelperPath(), sauf que cette méthode est uniquement disponible pour Zend_View, et non pas pour les classes implémentant Zend_View_Interface... !

Si quelqu'un a une solution, je suis preneur... wink

Hors ligne

 

#16 28-01-2008 17:26:12

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Helpers ???

Solution stupide et bourrine:
Copié coller la méthode addHelperPath()

Hors ligne

 

#17 28-01-2008 17:39:23

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

Re: [Résolu] Helpers ???

Salut,

J'ai une autre solution un peu moins bovine, mais pas sur qu'elle marche :
tu peux essayer de faire hériter ton Zend_View_Smarty de Zend_View (au lieu de simplement implémenter l'interface).
Cependant tu risques d'avoir des effets de bord, à tester...
Ensuite pour utiliser ton viewHelper, tu peux créer un plugin smarty qui va appeler la fonction qui va bien...

Sinon tu peux aussi décider de laisser tomber les viewHelpers du ZF et utiliser les fonctions et plugins smarty qui sont assez simples à utiliser
{html_radios}
{html_select_date}
{html_select_time}
...
et tes propres plugins smarty

A+, Philippe


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

Hors ligne

 

#18 28-01-2008 20:47:08

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: [Résolu] Helpers ???

Non je peux pas laisser tomber les view helpers car d'autres composants du ZF les utilisent (Zend_Form entre autres). Je vais essayer d'étendre la classe Zend_View (un article sur developpez.com le fait), tester tout ça et vous tient au courant. Je vais également éviter soigneusement les plugins Smarty pour ne pas alourdir tout ça...
Je trouve que c'est quand même incroyable que Zend n'ait pas pensé à ce genre de cas quand on utilise simplement l'interface...

Hors ligne

 

#19 28-01-2008 21:12:43

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Helpers ???

Euh perso je vois pas trop pourquoi tu utilise smarty dans ce cas car si tu n'utilise pas ses helpers mais ceux du zf, je vois pas trop quel interet ca a.
Enfin jdis ça mais j'ai jamais trop compris l'intêret de template si ce n'est quand il n'y a que des designers/integrateur qui bossent dessus...

Hors ligne

 

#20 30-01-2008 01:51:28

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: [Résolu] Helpers ???

J'ai finalement étendu Zend_View pour l'utilisation des helpers, et ça marche plutot bien. Par contre, je me retrouve face à des bugs ahurissants concernant ces mêmes helpers...
Je me suis créé des helpers dans un répertoire, et j'ai inclus ce répertoire avec $view->addHelperPath('xxx/yyy/zzz/Helpers/', 'MyHelpers_').
Le problème, c'est que si le ZF ne trouve pas le helper en question dans mon répertoire (comme un helper officiel genre formText, formErrors...), il m'affiche un Warning sur fopen, comme quoi il n'a pas pu ouvrir xxx/yyy/zzz/Helpers/formErrors.php alors qu'il se trouve dans Zend/View/Helper/ !

Code:

Warning : fopen(xxx\yyy\zzz\Helper\FormText.php) [function.fopen]: failed to open stream: No such file or directory
File : Zend/Loader.php (line n°203, function : fopen)

Warning : fopen(xxx\yyy\zzz\Helper\FormErrors.php) [function.fopen]: failed to open stream: No such file or directory
File : Zend/Loader.php (line n°203, function : fopen)

Warning : fopen(xxx\yyy\zzz\Helper\FormLabel.php) [function.fopen]: failed to open stream: No such file or directory
File : Zend/Loader.php (line n°203, function : fopen)

Une idée de ce que ça pourrait être ? Ou la 1.5.0 est encore bien buggée ?

Hors ligne

 

#21 30-01-2008 09:23:04

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Helpers ???

Peut être que tu devrais rajouté à la main les helpers par default...
As tu essayer de voir si il sont déjà présent (méthode getHelperPaths())?

Hors ligne

 

#22 30-01-2008 12:32:19

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: [Résolu] Helpers ???

En faisant print_r($view->getHelperPaths()), j'obtiens :

Code:

Array
(
    [0] => Array
        (
            [prefix] => MyHelper_
            [dir] => xxx\yyy\zzz\Helper\
        )

    [1] => Array
        (
            [prefix] => Zend_View_Helper_
            [dir] => includes\libs\ZendFramework-1.5.0PR\Zend\View\Helper\
        )
)

Et en regardant dans Zend/Loader.php, ligne 201, j'ai :

Code:

    public static function isReadable($filename)
    {
        if (!$fh = @fopen($filename, 'r', true)) {
            return false;
        }

        return true;
    }

L'arobase @ avant fopen n'a pas de faire grand chose car ça affiche toujours des warning... A ma connaissance, je ne connais pas de directive PHP qui peut annuler l'effet de l'arobase...

Hors ligne

 

#23 11-02-2008 21:01:46

kiminox
Membre
Date d'inscription: 15-01-2008
Messages: 37

Re: [Résolu] Helpers ???

Slt,
As tu résolu ce pb de message d'erreur affiché par fopen?
je fais appel à un helper que j'ai défini.
j'ai rajouté le chemin du helper dans la vue.
tout fonctionne sauf que Zend essaie d'abord de rechercher le helper dans la librairie/Zend : comme il ne trouve pas, ben j'ai un message d'erreur, récupéré par ma fonction de gestion des erreurs :

fopen(monappli\b\lib\Zend\View\Helper\PrintResultOk.php) [function.fopen]: failed to open stream: No such file or directory => monappli\lib\Zend\Loader.php - 194

Ensuite, Zend recherche dans le path du helper que je lui ai dis et il le trouve bien.

        $this->view->addHelperPath(_ROOT_PATH . 'myviews/helpers', 'Myviews_Helpers');

Que faire?

Yoong

Hors ligne

 

#24 12-02-2008 20:27:00

kiminox
Membre
Date d'inscription: 15-01-2008
Messages: 37

Re: [Résolu] Helpers ???

J'ai deux solutions :
1) soit vous filtrez le message d'erreur avec votre error handler :
     if (!preg_match('/fopen.*helpers/', $errmsg)) ....
2) soit, plus élégant, vous utilisez error_reporting() : si error_reporting() == 0 et que vous êtes dans votre error handler, cela signifie que c'est un message qui a été généré par un @function... et dont le error_reporting a été remis à 0 => donc on n'affiche pas! if (error_reporting() != 0) { afficherErreur...}
Pb résolu je pense!

Yoong

Hors ligne

 

#25 13-02-2008 09:58:44

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu] Helpers ???

Moi j'pense que des bidouilles comme ça ne sont pas nécessaires.
Le problème doit venir d'ailleurs (car "la vérité est ailleurs" wink ... pardon)

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