Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 26-09-2008 14:33:41

juli3n
Membre
Date d'inscription: 02-09-2008
Messages: 37

fonction commune à tous les controleurs & helper

Bonjour,

j'ai une question de débutant, mais je ne suis pas sûr d'avoir bien compris.

J'aimerai pouvoir utiliser une fonction toute bête dans tous mes controleurs, qui en gros prend du texte, et le renvoi dans un format "url":

par exemple

Code:

    function FormatUrl($text)
    {
        $text = str_replace("é", "e", $text);
        $text = str_replace("è", "e", $text); 
        $text = str_replace("ê", "e", $text); 
        $text = str_replace("ë", "e", $text); 
        $text = str_replace("í", "i", $text); 
        $text = str_replace("î", "i", $text);
        $text = str_replace("ï", "i", $text); 
        $text = str_replace("à", "a", $text);
        $text = str_replace("á", "a", $text);
        $text = str_replace("ã", "a", $text); 
        $text = str_replace("ù", "u", $text); 
        $text = str_replace("ü", "u", $text); 
        $text = str_replace("ö", "o", $text); 
        $text = str_replace(" d'", "-d-", $text);
        $text = str_replace(" n'", "-n-", $text);
        $text = str_replace(" m'", "-m-", $text);
        $text = str_replace(" t'", "-t-", $text);
        $text = str_replace(" l'", "-l-", $text); 
        $text = str_replace("'", "-", $text); 
        $text = str_replace("ñ", "n", $text); 
        $text = str_replace("ç", "c", $text); 
        $text = str_replace("ô", "o", $text); 
        $text = str_replace("ö", "o", $text); 
        $text = str_replace(" ", "-", strtolower($text));
        $text = str_replace("?", "", strtolower($text));
        $text = str_replace("!", "", strtolower($text));
        $text = str_replace(":", "", strtolower($text));
        $text = str_replace(",", "", strtolower($text));
        $text = str_replace(";", "", strtolower($text));
        $text = str_replace("&", "", strtolower($text));
        $text = str_replace("(", "", strtolower($text));
        $text = str_replace(")", "", strtolower($text));
        return $text; 
    }

Faut-il déplacer la fonction en tant que helper? et l'instancier dans le bootstrap?


Je ne suis pas du tout sûr de mon coup, là ... pourriez vous me dire comment faire?

merci d'avance,

Julien

Hors ligne

 

#2 26-09-2008 16:00:24

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

Re: fonction commune à tous les controleurs & helper

Bonjour,

Là c'est une fonction qui est complètement indépendante du reste de ton appli. Tu n'as pas de raison de la lier au MVC du ZF.

Bref à mon avis tu as deux solutions :
- la version simple : tu crées une fonction globale (tu dans un fichier que tu inclus dans ton bootstrap par exemple). Là tu y as accès partout. Les puristes vont hurler parce que si tu utilise ensuite un autre programme qui définit la même fonction ailleurs, PHP va raler... mais bon, souvent ça marche bien...
- la version de puriste : tu crées un singleton avec cette fonction dedans... Je te laisse fouiller sur Internet pour voir ce que c'est. Je pense que dans ton cas, ça n'est pas forcément utile tout de suite...

A+, Philippe


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

Hors ligne

 

#3 26-09-2008 16:32:34

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: fonction commune à tous les controleurs & helper

Hello,

Pour la version puriste, j'aurais plutôt vu :

Code:

class Mes_Fonctions
{
    static public function FormatUrl($text)
    {
    ...
    }
}
// que tu appeles ensuite :
Mes_Fonctions::FormatUrl('montexte');

Mais c'est ma version de "puriste" smile.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#4 26-09-2008 16:42:30

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

Re: fonction commune à tous les controleurs & helper

Ca se défend, c'est la 3e voie, intermédiaire smile

Les fonctions statiques c'est pas trop mon truc (même si dans ce cas, ça s'applique très bien). A un moment où à un autre on finit par vouloir étendre sa classe ou modifier son comportement; et là avec les fonctions statiques, ça devient rapidement l'enfer (le meilleur exemple pratique étant Zend_Session qui est je pense le code le plus pourri du ZF... essayez de modifier le comportement de Zend_Session sans toucher au code du ZF pour voir)...

Bref, on a tous nos manies... moi j'aime pas les fonctions statiques... c'est pas négociable, je suis buté comme une mule smile

A+, Philippe

PS : ça ira peut-être mieux en PHP 5.3 avec des héritages un peu meilleurs des variables et fonctions statiques...


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

Hors ligne

 

#5 28-09-2008 14:10:22

elkolonel
Administrateur
Lieu: Grasse
Date d'inscription: 18-12-2007
Messages: 299
Site web

Re: fonction commune à tous les controleurs & helper

@ Philippe -> ne serait ce pas "tétu comme une mule" ??? ;-)

Hors ligne

 

#6 28-09-2008 16:10:51

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: fonction commune à tous les controleurs & helper

il y a beaucoup simple que ça
tu créé une classe Application_Action qui dérive de Zend_Action
là tu y place toute les méthodes commune à tous tes controllers
et tu fais dériver tes controllers de Application_Action ainsi ils en en hérite tout naturellement.

Tu as respecté le modèle objet, tu as conservé les design pattern MCV et tu n'as fais qu'une simple classe

A+JYT

Hors ligne

 

#7 29-09-2008 09:29:06

juli3n
Membre
Date d'inscription: 02-09-2008
Messages: 37

Re: fonction commune à tous les controleurs & helper

Merci à tous pour vos conseils! Il y a plusieurs façon de faire, c'est super!

les solutions de mikaelkael et sekaijin me semblent les plus simples, je pense regarder de ce côté là smile

Hors ligne

 

#8 30-09-2008 18:36:22

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: fonction commune à tous les controleurs & helper

Je complète en disant qu'une méthode statique est environ 2 à 3 fois plus rapide à invoquer qu'une méthode demandant la création d'une instance.

J'utiliserai une méthode statique aussi de mon coté, et plutôt trim() que str_replace()

Hors ligne

 

#9 30-09-2008 20:00:50

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: fonction commune à tous les controleurs & helper

Julien a écrit:

Je complète en disant qu'une méthode statique est environ 2 à 3 fois plus rapide à invoquer qu'une méthode demandant la création d'une instance.

J'utiliserai une méthode statique aussi de mon coté, et plutôt trim() que str_replace()

Oui est non dans le cas présent si tu mets ton code dans une classe dont hérite ton contrôleur tu n'a pas à instancier de classe pour invoquer ta méthode vu que l'instance que tu as besoin pour cela c'est le contrôleur lui-même. tu fais donc un $this->maMethode();
c'est donc très rapide vu que tu n'invoque pas d'autre classe que celle du contrôleur courant.

la méthode statique serait opportune si tu voulait accéder à ta méthode en dehors du contrôleur. là effectivement tu serais contraint d'instacier une classe juste pour accéder à une méthode, alors que la méthode statique te permet de le faire depuis la classe directement.

A+JYT

Hors ligne

 

#10 30-09-2008 23:28:49

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: fonction commune à tous les controleurs & helper

Bonsoir,

quitte à être vraiment puriste, pour une méthode comme celle-ci, je dirai qu'un Zend_Filter serait tout à fait approprié, du genre :

Code:

class MyUrlFilter implements Zend_Filter_Interface
{
    public function filter($value)
    {
        // ici tes remplacements dans la chaîne $value
        // à ce propos, qu'est-ce que tu as contre urlencode() ?? ;)
        return $value;
    }
}

tu places ça dans un dossier type /lib/, ou quoi que ce soit d'autre dans ton include_path, puis tu l'utilises comme suit, dans tes contrôleurs ou ailleurs :

Code:

$filter = new Filter();
$filter->addFilter(new MyUrlFilter());
$urlFiltree = $filter->filter($urlPasFiltree);

Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

Hors ligne

 

#11 01-10-2008 07:42:55

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: fonction commune à tous les controleurs & helper

je suis d'accord là dessus pour ce qui est d'un filtre mais le sujet du topic est "Fonction commune à tous les controleur & helper"

j'ai donc répondu hors du cas particulier que sont les filtres.

j'ai moi aussi de nombreuses fonctions communes à tous mes contrôleurs et ce ne sont pas des filtres.
Zend en a identifié pas mal qui sont suffisamment générique pour être utilisé part tous les contrôleurs et c'est la raison de la présence de Zend_Action.
pour ma part dans le cadre de mon travail j'en ai d'autre qui sont moins universelle et très répandue chez moi. J'ai donc suivit le modèle de Zend qui n'est pas mauvais du tout.

A+JYT

Hors ligne

 

#12 01-10-2008 09:10:20

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: fonction commune à tous les controleurs & helper

Hello,

J'ai répondu pour ma classe "fourre-tout" (rassurez-vous elle n'a que peu de fonctions smile ).
Dans ce cas précis, j'aime bien le filtre en fait. Pour ceux qui trouve l'application trop verbeuse :

Code:

$filter = new Filter();
$filter->addFilter(new MyUrlFilter());
$urlFiltree = $filter->filter($urlPasFiltree);

Il y a aussi la forme courte :

Code:

$urlFiltree = Zend_Filter::get($urlPasFiltree, 'MyUrlFilter');

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#13 01-10-2008 09:36:01

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

Re: fonction commune à tous les controleurs & helper

Ca fait un peu combat de coq votre discution :p


----
Gruiiik !

Hors ligne

 

#14 01-10-2008 09:56:54

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: fonction commune à tous les controleurs & helper

Hello,

Ca fait un peu combat de coq votre discution tongue

C'est vrai que vu de loin, ça peut paraître mesquin.

Mais pour ma part, comme je code toujours de la même façon (enfin presque), avoir des opinions différentes et des façons de voir les choses différentes est toujours intéressant.

Tant que cela ne tourne pas à "voici la solution miracle que vous devez tous adopter" smile

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#15 01-10-2008 14:36:00

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: fonction commune à tous les controleurs & helper

nORKy a écrit:

Ca fait un peu combat de coq votre discution :p

Pas du tout, au contraire.

Je ne crains pas de dire que j'ai appris des choses et je trouve intéressant de confronter amicalement les différentes façons de rendre globalement le même service.

Je le redis, ce sont les forum auxquels j'ai le plus de plaisir et d'intérêt à lire et participer.

Hors ligne

 

#16 01-10-2008 18:33:52

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: fonction commune à tous les controleurs & helper

oui tout a fait c'est intéressant de confronté les point de vus car ça permet de dégager des éléments qui ne transparaitraient pas sans ça.

ça permet aussi de voir où son propre discourt à introduit de l'ambiguïté et ainsi de mieux cerner les propositions.

Donc ni combat de coq ni querelle de chapelle juste la rencontre de plusieurs approche.

J'ai pour habitude de dire que la meilleure solution est celle que tu maitrise le mieux.

A+JYT

Hors ligne

 

#17 01-10-2008 21:43:15

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: fonction commune à tous les controleurs & helper

je suis d'accord là dessus pour ce qui est d'un filtre mais le sujet du topic est "Fonction commune à tous les controleur & helper"

j'ai donc répondu hors du cas particulier que sont les filtres.

j'ai moi aussi de nombreuses fonctions communes à tous mes contrôleurs et ce ne sont pas des filtres.

+1 pour sekaijin smile

Je suis d'accord que pour des fonctions plus génériques, la méthode consistant à créer une classe  dérivant de Zend_Controller_Action pour en faire dériver tous les contrôleurs de l'application (ou tous ceux d'un module donné) me semble la plus élégante.

A noter que cela peut aussi bien s'appliquer aux modèles.


Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

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