Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai mis en place un routage sur mon front controller qui fonctionne très bien.
$oRouter = $oZCF->getRouter(); $route = new Zend_Controller_Router_Route( 'ws/:action/:port', array('controller' => 'ws') ); $oRouter->addRoute('ws', $route); $oZCF->dispatch();
Désormais pour être organiser le tout, j'aimerais mettre chaque routage dans le controller concerné.
J'ai essayé faire le routage dans la méthode init du controller mais sans succès.
public function init() { $oRouter = $this->getFrontController()->getRouter(); $route = new Zend_Controller_Router_Route( 'ws/:action/:port', array('controller' => 'ws') ); $oRouter->addRoute('ws', $route); $this->getFrontController()->dispatch(); }
Comment s'y prendre ?
Merci.
Hors ligne
C'est pas possible, ton site doit connaître le routage pour pouvoir envoyer vers le bon contrôleur. Tu es donc obligé de définir tes routages avant les contrôleurs.
(et puis les routages sont lus lors du dispatch, donc avant qu'un quelconque contrôleur ne soit instancié).
A+, Philippe
Hors ligne
On ne peut donc pas faire de "sous réseau de routage" ?
Ca ne me semblait pas illogique de mettre ça dans le init du controller.
Si l'on possède un site de gros ampleur, tout se retrouve dans le front controller... bonjour la maintenabilité.
Quelqu'un peut-il me confirmer qu'il n'existe pas d'autre moyen.
Merci
Hors ligne
Je confirme que l'unique moyen à ma connaissance est de définir les routes avant que le router parse l'URL. En tout dernier lieu elles peuvent donc être ajoutées dans la méthode RouteStartup d'un plugin, mais pas après.
Tu ne peux pas demander à un contrôleur d'initialiser les routes étant donné qu'un contrôleur est construit seulement après qu'une URL soit parsée (que les routes enregistrées ont été étudiées par le router donc).
Question maintenabilité une idée peut être de configurer les routes dans la config, en les classant par catégories, et laisser le plugin de ressources Zend_Application_Resource_Router se charger de les ajouter.
Hors ligne
Salut,
C'est logique de vouloir les routes pour un controlleur dans le controlleur.
J'aurais tendance à placer les routes dans des fichiers XML et ré-écrire le plugin de ressource "Zend_Application_Resource_Router".
Ensuite c'est facile de découper comme on veut les XML et donc facile à maintenir.
Sinon, un truc de gros bourrin serait de faire de la réflection et de parcourir les controllers pour trouver celui auquel la route correspond. Grâce à de la PHPDoc par exemple
A+ benjamin.
Dernière modification par Delprog (17-09-2009 14:22:36)
Hors ligne
A la limite il reste la possibilité de faire un plugin qui bidouille les routes dans le routeStartup().
Pour ce qui est de la "maintenabilité du frontController", a toi de faire une classe et de toute découpé en méthode, ou simplement d'utiliser une fichier de config pour tes routes avec/sans Zend_Application.
Bien lire la doc est important, toutes les solutions y sont exposés.
Hors ligne