Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
j'aimerais définir mes propres routes pour mon application. Pour ca j'ai créer le fichier "/application/configs/routes.ini" qui contient ceci :
[routes] routes.compat.route = ":language/:sport/:module/:controller/:action/*"
J'ai ensuite rajouté le code suivant dans mon boostrap mais rien ne marche. Les nouveaus paramètre "language" et "sport" ne sont pas pris en compte...
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { ------ protected function _initRouter() { // Récupération d'une instance du controleur frontal (singleton) $frontController = Zend_Controller_Front::getInstance(); $router = new Zend_Controller_Router_Rewrite(); $router->addConfig(new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'), 'routes'); $frontController->setRouter($router); } ----- }
Quelle est la bonne méthode ?
Merci d'avance.
Hors ligne
Ta règle semble étrange.....
A quoi ressemble l'URL réel et l'URL que tu souhaite?
Hors ligne
Il me semble qu'il faut utiliser la méthode "_initRoutes()" au lieu et place de "_initRouter()" dans le bootstrap.
Hors ligne
Non non quelque soit le '_initXXXXXX' il sera évalué
Néanmoins une petite chose m'interpelle, si tu fais ça, est-ce qu'un changement apparait ?
protected function _initRouter() { $this->bootstrap('FrontController'); $front = $this->getResource('FrontController'); $options = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'), 'routes'); $router = $front->getRouter(); $router->addConfig($options); return $router; }
Dernière modification par yvann (08-07-2009 08:25:16)
Hors ligne
@pastel : L'url est pour l'instant sous la forme suivante :
http://monsite/news/
(module -> news ; controller -> index ; action -> index)
et je souhaiterais avoir ceci :
http://monsite/fr/sport1/news
(language -> fr ; sport -> sport1 ; module -> news ; controller -> index ; action -> index)
@Yvann : Je ne suis pas chez moi actuellement donc je ne pourrais pas tester avant ce soir. J'avoue que je n'ai pas encore bien compris le fonctionnement du bootstrap. Tout ce que je sais c'est qu'il execute automatiquement les méthodes commencant par "_init". Après ca, je ne sais pas ce que la méthode doit retourner.
Je vais donc tester ton code ce soir mais avant, juste une question :
Que veut dire cette ligne : $this->bootstrap('FrontController'); ?
Hors ligne
Cette ligne sert à "lancer" la resource "FrontController", afin d'être certain qu'à l'appel de celle-ci via le
$front = $this->getResource('FrontController');
elle soit bien retournée.
Attention toutefois à ne pas faire d'appel cyclique ( la resource Frontcontroller qui lancerait elle un
$this->bootstrap('Router');
), enfin à vrai dire tu as une exception te le précisant donc l'erreur est rapidement réglée.
Dernière modification par yvann (08-07-2009 15:07:03)
Hors ligne
Il y avait une légère erreur de syntaxe dans le code que tu présentés yvann. Voici ce que j'ai écrit :
protected function _initRouter() { $this->bootstrap('frontController'); $front = $this->getResource('frontController'); $router = $front->getRouter(); $router->addConfig(new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'), 'routes'); return $router; }
Et ca marche parfaitement mais par contre, je dois mettre le chemin complet : "http://monsite/fr/sport1/news/index/index"
Si j'appel l'adresse "http://monsite/fr/sport1/news", j'ai le message d'erreur suivant :
#An error occurred Page not found ; #Exception information: Message: Invalid controller specified (fr) ---- #Request Parameters: array(3) { ["controller"]=> string(2) "fr" ["action"]=> string(3) "sport1" ["module"]=> string(8) "frontend" }
J'y suis presque mais je ne comprends pas encore parfaitement le comportement du routeur.
Dernière modification par slaughter (09-07-2009 00:43:12)
Hors ligne
Quelle était l'erreur de syntaxe ?
Sinon peux-tu nous montrer ton "routes.ini" ?
Hors ligne
Juste une erreur de copier/coller :
$options = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'), 'routes');
petit problème de parenthèse.. et le dernier 'routes' n'est pas à placer ici. Je pense que tu voulais faire ça :
$options = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'); $router = $front->getRouter(); $router->addConfig($options,'routes');
Voici le contenu de mon routes.ini :
[routes] routes.site.route = ":language/:sport/:module/:controller/:action/*"
Hors ligne
As tu des valeurs par défaut ?
routes.site.route = ":language/:sport/:module/:controller/:action/*" routes.site.defaults.module = news routes.site.defaults.controller = index routes.site.defaults.action = index
Hors ligne
Pages: 1