Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-08-2007 06:31:38

Carlito
Nouveau membre
Date d'inscription: 08-08-2007
Messages: 3

DIfférence entre init() et preDispatch() ?

Hello,

Je voudrais effectuer des actions avant d'aller dans le controller, ces 2 méthodes semblent réaliser ce que je souhaite faire mais quelle est la différence entre les 2? J'ai cherché sur google mais je n'ai rien trouvé sur la différence entre les deux.

Merci

Hors ligne

 

#2 08-08-2007 10:59:15

fizzbanana
Membre
Date d'inscription: 29-05-2007
Messages: 40

Re: DIfférence entre init() et preDispatch() ?

Il y a deux facons a utiliser preDispatch()
1) Dans un Controller
2) Dans un Controller Plugin

Le difference entre 1) et 2) est le moment ou le travail de preDispatch est fait.  Avec un plugin le preDispatch() est fait avant de entrer dans un Controller.  C'est fait a niveau de FrontController.  Si tu fait le preDispatch() dans un Controller, ce applique seulement quand tu rentre dedans ce Controller.

Info sur Controller Plugins:

http://framework.zend.com/manual/fr/zen … ugins.html

Utiliser init() dans un Controller pour faire des choses avant de faire n'importe qu'elle Action dans ceController.  Ce applique seulement pour ce Controller.

En fin, init() est plus ou moins comme un _construct, mais comme on n'utilise pas _construct avec Controllers, on utilise init().

-mark

Dernière modification par fizzbanana (08-08-2007 11:32:34)

Hors ligne

 

#3 08-08-2007 22:34:26

Carlito
Nouveau membre
Date d'inscription: 08-08-2007
Messages: 3

Re: DIfférence entre init() et preDispatch() ?

Désolé mais meme avec ton explication j'ai du mal à saisir la différence.

Les deux sont appliqués juste avant l'action dans le controller donc c'est pareil? big_smile

Hors ligne

 

#4 09-08-2007 06:37:35

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

Re: DIfférence entre init() et preDispatch() ?

Bonjour,

* Le init() est appelé lors de l'instanciation de ta classe TotoController.
* Le preDispatch() est appelé juste avant d'appeler l'action

En général la différence n'est pas énorme entre les deux mais il y a quelques opérations entre les 2 appels :
après le init() :
* le ZF recherche si l'action existe (si elle n'existe pas, ça fait une exception)
* le ZF appelle les preDispatch() des helpers
* et enfin le ZF appelle le preDispatch de ton TotoController

En plus avant les exceptions ne sont pas gérées de la même façon : il y a un try / catch dans le ZF autour du preDispatch() de ton TotoController alors que ça remonte directement depuis init().

A+, Philippe


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

Hors ligne

 

#5 09-08-2007 07:21:43

Carlito
Nouveau membre
Date d'inscription: 08-08-2007
Messages: 3

Re: DIfférence entre init() et preDispatch() ?

merci

Hors ligne

 

#6 24-08-2007 11:55:42

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

Re: DIfférence entre init() et preDispatch() ?

imagine que tu utilise ta classe d'action pour autre usages que pour les actions.
tu vas donc créer une instance de ta classe. la méthode ini est là pour faire des traitement avant d'utiliser ton objet.

prédispatch est là pour effectuer des traitements avant d'invoquer une action de ta classe par le controller.

en temps normal il n'y a pas grande difference
ini est donc là pour préparer la l'objet et prédispatch pour préparer une invocation d'action.

par exemple ta classe utilise est éléments dans un fichier config ini sera en charge de lire le fichier de conf

pour tes actions tu veux vérifier que l'utilisateur à le droit de faire l'action demandée. dans prédispatch tu vérifie la chose et tu autorise ou non le dispatching

il faut voir le prédispatch comme un on off sur l'action avenir alors que le ini est une préparation de l'ensemble de l'objet

A+JYT

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