Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
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
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?
Hors ligne
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
Hors ligne
merci
Hors ligne
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