Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonsoir,
J'ai fait un peu le tour du forum et en fait je cherche un exemple de router, si c'est la bonne méthode, qui me permettrait de récupérer quelque chose du genre www.toto.com/truc.html et de le traiter comme www.toto.com/truc et donc vers l'action trucAction() de mon IndexController.
J'ai vu qu'avec les router_regex on avait beaucoup de possibilité, mais seulement, je n'arrive à appliquer ça à l'ensemble des actions en une seule expression. Tous les exemples ciblent des action spécifiques.
Or moi j'aimerais router n'importe quelle action ***.html vers le même controller et la même action sans .html.
Si certains savent m'aider
Et pour préciser, je ne décide pas de garder les .html par caprice, c'est une refonte de site, et c'est pour éviter de rendre morts tous les liens qui se balladent déjà sur la toile et qui pointe vers des pages de l'ancien site (ce qui aurait un impact assez désastreux sur le positionnement du site dans les moteurs)
Merci,
A+ Benjamin.
Dernière modification par Delprog (08-10-2008 10:02:15)
Hors ligne
Bonjour,
J'ai eu le même problème que toi, pour le résoudre les routes n'ont pas suffit, j'ai utilisé un plugin qui gérait une partie du routage :
Dans mon bootstrap, j'avais en gros :
$router->addRoute( "other", new Zend_Controller_Router_Route_Regex( '(.+)', array( 'controller' => 'index', 'action' => 'cms', 'route' => 'other' ), array( 1 => 'pageName' ) ) ); $router->addRoute( "cms", new Zend_Controller_Router_Route_Regex( '(.+)\.php', array( 'controller' => 'index', 'action' => 'cms', 'route' => 'cms' ), array( 1 => 'pageName' ) ) );
Ensuite j'avais un plugin qui analysait ce paramètre "pageName" dans le routeShutdown (donc juste après le routage standard)
class Kitpages_MyProject_Plugin extends Zend_Controller_Plugin_Abstract { public function routeShutdown(Zend_Controller_Request_Abstract $request) { $allParams = $request->getParams(); $route = $request->getParam("route",null); $pageName = $request->getParam("pageName",null); // correct pageName by adding index.php if needed if ($route == "other") { $pageName = $pageName."/index"; $request->setParam("pageName",$pageName); } // check routing table and change controller and action if needed $mapping = array( "index" => "index|home", "loa/nos_vehicules" => "loa|vehicules" [...] ); if (isset($mapping[$pageName])) { $tab = explode("|",$mapping[$pageName]); $request->setControllerName($tab[0]); $request->setActionName($tab[1]); } } }
chez moi c'est des .php et pas .html, mais c'est pareil. La route "other" permet de gérer les noms de répertoire où il faut ajouter "/index.php" à la main (c'est la dernière route qui est prioritaire, donc si il y a .php, c'est bien la route "cms" qui est prise en compte...)
A+, Philippe
Hors ligne
Salut Philippe,
Merci pour ta réponse, entre je me suis aussi fait un plugin :
class MyLib_Plugin_Rout extends Zend_Controller_Plugin_Abstract { public function __construct() { } public function preDispatch(Zend_Controller_Request_Abstract $request) { $controller = $request->controller; $action = $request->action; $module = $request->module; $pos = strrpos($controller, '.html'); if ($pos === false) { $pos = strrpos($action, '.html'); if (!($pos === false)) { $action = substr($action, 0, $pos); $request->setModuleName($module); $request->setControllerName($controller); $request->setActionName($action); } } else { $action = substr($controller, 0, $pos); $controller = 'index'; $request->setModuleName($module); $request->setControllerName($controller); $request->setActionName($action); } //die('module : ' . $module . ' / controller : ' . $controller . ' / action : ' . $action); } }
Bon c'est qu'un début, maintenant je dois gérer les actions avec paramètres.
Après d'un point de vue propreté, je ne sais pas, ta solution est sans doute meilleure
A+ benjamin.
Dernière modification par Delprog (08-10-2008 10:03:23)
Hors ligne