FAQ Zend FrameworkConsultez toutes les FAQ

Nombre d'auteurs : 16, nombre de questions : 39, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireZend_Controller

Dans mon controller, je récupère le nom du module, de l'action, du controller et je l'affecte à mes variables de vue pour pouvoir les afficher ou les tester :

 
Sélectionnez
$this->view->module = $this->getRequest()->getModuleName();
// recupere le module
$this->view->controller = $this->getRequest()->getControllerName(); 
// recupere le controller
$this->view->action = $this->getRequest()->getActionName(); 
// recupere l'action
        
Créé le 30 juin 2008  par arnoweb

Le plugin ErrorHandler est fait pour vous : Zend_Controler_Plugin_ErrorHandler.

Créé le 24 juin 2007  par Julien Pauli

Le Zend Framework intègre un système de routage, complémentaire au module mod_rewrite du serveur web Apache. Il est important de comprendre le fonctionnement du routage par défaut inclut dans le framework.

Le premier routage n'est pas dû au Zend Framework, mais au fichier htaccess. En effet, le fichier htaccess doit diriger la plupart des requêtes vers le fichier "bootstrap". Voici le fichier htaccess proposé par la documentation du Zend Framework :

 
Sélectionnez
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
        RewriteRule .* /index.php

Donc, cette première redirection mène les toutes les requêtes (autres que les fichiers images, CSS et Javascript) vers le fichier index.php, le fichier amorce de l'application.

Dans ce même fichier, le Zend Framework entre en jeu lorsque vous dispatchez l'action, à l'aide du code suivant :

 
Sélectionnez
$frontController->dispatch();

Le "Front Controller" va, selon un ordre déterminé, chercher le contrôleur correspondant à la requête de l'utilisateur. Tout cela grâce aux "routes".

Par défaut, le Zend Framework définit plusieurs routes génériques. Voici quelques exemples de "routes" gérées par défaut (traduits de la documentation officielle) :

 
Sélectionnez
// Si on ajoute quelques modules
$frontController->setControllerDirectory(
    array(
        'default' => '/path/to/default/controllers', // Les contrôleurs par défaut, lorsque le module n'est pas spécifié
        'forum'    => '/path/to/forum/controllers', // Un module forum
        'blog'    => '/path/to/blog/controllers' // Un module blog
    )
);
 
// Exemple avec seulement le module
http://exemple/forum
    => module == forum
 
/*
 Dans ce cas, le dispatcheur va chercher un contrôleur IndexController
 dans le module 'test'. Hors, ce module n'existe pas. Il va alors chercher un contrôleur 'test', dans le dossier du module 'default'.
*/
http://exemple/test
    => controller == test
 
/*
 On spécifie ici le module et le contrôleur.
*/
http://exemple/blog/article
    => module     == blog
    => controller == article
 
/*
 Dans ce cas, on spécifie à la fois le module, le contrôleur, et l'action.
*/
http://exemple/blog/archive/list
    => module     == blog
    => controller == archive
    => action     == list
 
/*
 En plus du module, du contrôleur et de l'action, on spécifie ici des paramètres.
*/
http://exemple/blog/archive/list/sort/alpha/date/desc
    => module     == blog
    => controller == archive
    => action     == list
    => sort       == alpha
        => date       == desc

Ces quelques exemples nous montrent que le système de routage du Zend Framework est assez puissant par défaut. Cependant, il vous sera peut être nécessaire de créer un routage plus spécifique. Il est heureusement possible de configurer vos propres routes, à l'aide du routeur.

Créé le 9 juin 2008  par Janitrix

Bien que la plupart du temps, on utilise des routes dites "dynamiques" (donc avec une partie du lien qui est variable), il se peut que vous ayez besoin de routes statiques. Par exemples, si votre contrôleur s'appelle ContactController, avec une action sendAction, par défaut, on accederait à cette action avec le lien z-f/contact/send, ce qui n'est pas forcément souhaitable. Vous préfereriez peut être y accéder avec un lien du type z-f/Nous-Contacter.

Dans ce genre de situation, on peut facilement créer une route personnalisée :

 
Sélectionnez
// On récupère le gestionnaire de routes
$router = $frontController->getRouter();
// On créé la route statique
$route = new Zend_Controller_Router_Route_Static(
    'Nous-Contactez',
    array('controller' => 'contact', 'action' => 'send')
);
// On ajoute la route
        $router->addRoute('contact', $route);

Ce code est relativement simple : on récupère le gestionnaire de routeur à partir de l'instance du Front Controller, puis, on créé un objet Zend_Controller_Router_Route_Static, qui représente une route statique. Le premier paramètre est le lien d'accès à cette route, donc concrètement, c'est ce paramètre qui représente la route "virtuelle" par laquelle le visiteur accédera à l'action. Le deuxième paramètre est un tableau d'options, comprennant le contrôleur et l'action cibles de cette route.

Enfin, on ajoute la route à la suite de celles existantes, en spécifiant un identifiant de route et l'objet route associé. Ce nom devrait être unique, mais le Zend Framework ne réalise aucune vérification. Si vous utilisez deux fois le même nom, la dernière entrée écrasera les précédentes. Il faut noter que les listes sont ajoutées dans une pile, par conséquent, la dernière ajoutée sera la première récupérée pour déterminer le contrôleur à utiliser.

Créé le 25 juin 2008  par Janitrix
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.