Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous
J'ai un site internet appelé toto.com
J'ai également un espace client que j'ai appelé manager.toto.com
toto.com utilise le module web
manager.toto.com utilise le module manager
pour éviter d'avoir à répéter le nom du module dans les url, j'ai décidé de faire 2 routes dans le fichier config.ini avec le chainage du hostname
Voici le code :
resources.router.routes.web.route = "/:controller/:action/*"
resources.router.routes.web.type = "Zend_Controller_Router_Route"
resources.router.routes.web.defaults.module = "web"
resources.router.routes.web.defaults.controller = "accueil"
resources.router.routes.web.defaults.action = "index"
resources.router.routes.manager_host.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.manager_host.route = "clients." HOSTNAME
resources.router.routes.manager.route = "/:controller/:action/*"
resources.router.routes.manager.type = "Zend_Controller_Router_Route"
resources.router.routes.manager.defaults.module = "manager"
resources.router.routes.manager.defaults.controller = "login"
resources.router.routes.manager.defaults.action = "index"
resources.router.routes.manager_host_route.type = "Zend_Controller_Router_Route_Chain"
resources.router.routes.manager_host_route.chain = "manager_host,manager"
Dans le premier paragraphe il s'agit d'utiliser le module par défaut avec la route standard
En l'occurrence, que ce soit clients.toto.com ou toto.com c'est cette route qui sera utilisé.
Cas général donc (comme mentionné dans la doc de Zend LIFO)
Après je récupère le sous domaine et je le chaine avec la route. La seule chose qui change c'est le module utilisé qui est alors manager au lieu de web
http://clients.toto.com/moncontrolleur/ … m1/valeur1
http://toto.com/moncontrolleur/monaction/param1/valeur1
Sont donc deux url différentes or je n'arrive pas à aller dans le module manager. C'est comme si la requête s'arrête au premier paragraphe.
Par contre si je copie colle le premier paragraphe entre entre
resources.router.routes.manager.defaults.action = "index"
resources.router.routes.manager_host_route.type = "Zend_Controller_Router_Route_Chain"
Là ca marche, toto.com m'envoi vers le module web et manager.toto.com vers le module manager.
J'avoue ne pas comprendre le fonctionnement du parseur car logiquement il devrait parcourir le document de bas en haut comme cela :
Si je (je me met à la place du parseur) rencontre *.toto.com ou toto.com directement j'envoi vers le module web.. je continue.. à tiens j'ai trouvé http://manager.toto.com.. ahhh là il faut que j'utilise la route manager donc.
Si quelqu'un peut m'aider ça serait sympa.
PS : Je pourrai aussi faire une route genre toto.com/manager/controller/action/parametre/valeur qui renvoi toujours vers le bon module, mais il faut a chaque fois répéter le mot manager. Je préfère avoir donc http://manager.toto.com et toto.com de nombreux sites fonctionnent comme cela d'ailleurs
PS 2 : Est il possible de traduire le hostname également en le chainant ? Genre manager.toto.com en Anglais pourrait devenir clients.toto.com en Français .. ?
PS 3 : Dans la doc de Zend ils marquent cela "Les routes par nom d'hôtes peuvent, mais ne devraient pas être utilisées comme ceci. La raison à cela est que qu'une route par nom d'hôte seule ne correspondra à aucun chemin. Donc vous devez donc chaîner le chemin d'une route à une route par nom d'hôte. "
Je ne comprends pas du tout ce qu'ils veulent dire.. j'ai beau chercher et remuer google dans tous les sens je ne trouve rien.
PS 4 : Une toute petite question par rapport aux regexp.. j'ai vu qu'on peut faire du reverse url. A quoi cela sert-il donc ? Car mis à part générer des belles URL optimisée SEO en fonction des paramètres données dans le view->helper->url je ne vois pas trop l'utilisé, d'autant plus qu'il n'est pas possible de rendre un paramètre optionnel toto([a-z]?)\.html le reverse URL doit etre toto%s.html mais si je rajoute ([a-z]?(-[a-z]?))\.html dans le patern, le rerverse devrait etre %s%s\.html or %s répétera deux fois le premier [a-z].. j'ai donc pas du tout comprendre.. si quelqu'un peut également m'éclairer la lanterne je en lui serai reconnaissant
Merci !
Hors ligne
Je simplifie j'ai ceci :
resources.frontController.defaultModule = "site1"
resources.frontController.defaultControllerName = "accueil"
resources.frontController.defaultAction = "index"
resources.frontController.useDefaultControllerAlways = false
resources.layout.layout = "template"
resources.router.routes.site1_host.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.site1_host.route = "www.site1.home"
resources.router.routes.site1.type = "Zend_Controller_Router_Route"
resources.router.routes.site1.route = "/:controller/:action/*"
resources.router.routes.site1.defaults.module = "site1"
resources.router.routes.site1.defaults.controller = "accueil"
resources.router.routes.site1.defaults.action = "index"
resources.router.routes.site1_host_route.type = "Zend_Controller_Router_Route_Chain"
resources.router.routes.site1_host_route.chain = "site1_host,site1"
resources.router.routes.site2_host.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.site2_host.route = "www.site2.home"
resources.router.routes.site2.type = "Zend_Controller_Router_Route"
resources.router.routes.site2.route = "/:controller/:action/*"
resources.router.routes.site2.defaults.module = "site2"
resources.router.routes.site2.defaults.controller = "accueil"
resources.router.routes.site2.defaults.action = "index"
resources.router.routes.site2_host_route.type = "Zend_Controller_Router_Route_Chain"
resources.router.routes.site2_host_route.chain = "site2_host,site2"
Il me renvoi toujours sur site2 même si je tapes http://site1.home (ou www.site1.home) (redirection de permanente de site1.com vers www.site1.com par .htaccess)
Je ne comprends pas pourquoi : http://www.site1.com devrait correspondre avec la route du premier block du routing.. pourquoi il l'ignore et continue vers site2 ?
Non en fait il utilises le default module et ignore les routes que je lui donnes.. pourquoi ?
Est ce qu'il y a moyen également de préfixer les classes du module par défaut, car si je changes le defaut module, (je le mets sur site2 par exemple) faut que je préfixe les controllers de site1 avec Site1_Controller..
Dernière modification par xenesis (02-06-2011 15:04:48)
Hors ligne
une idée .. ?
Hors ligne
personne.. ?
Hors ligne
J'ai vraiment besoin d'un coup de main pour comprendre là..
Hors ligne