Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour ,
Bon j'utilise Zend_Controller_Router_Route_Regex actuellement dans mon application et malgré quelque difficulté au début j'ai trouvé une solution mais incomplète en plus je veux passer mon code pour des gens qui n'ont pas encore utiliser cette classe.Je souhaite créer des pages personnalisées sur mon site pour les villes,voilà mon code:
index.php :
$router = Zend_Controller_Front::getInstance()->getRouter(); $route = new Zend_Controller_Router_Route_Regex('city/([-\w]+)\.html?', array( 'controller' => 'users', 'action' => 'index' ), array( 1 => 'cityName', ), 'city/%s.html'); $router->addRoute('city', $route);
et dans le script vue :
<a href="<?php echo $this->url(array('cityName' => 'paris'), 'city', true); ?>">Title</a>
Alors cela marche bien mais je ne peux pas utiliser cette fonction que pour une seule page city/paris.php,alors j'ai 60 villes.Quand je met par exemple deux fois le code pour deux pages il m'affiche une seule pages pour les deux,c'est à dire que pour city/paris.php et city/marseille.php il me redirige toujours vers la deuxième,donc je trouve deux problèmes :
1) Une confusion entre les deux pages,
2) Je dois réécrire le code pour chaque page alors c'est trop lourd comme code.
J'ai essayé à remédier le premier problème avec Zend_Controller_Router_Route_Static cela marche avec deux pages,j'ai fais comme suit :
index.php :
$router = Zend_Controller_Front::getInstance()->getRouter(); $route = new Zend_Controller_Router_Route_Static('paris.php',array('action'=> 'index','controller'=> 'index')); $router->addRoute('paris', $route); $route = new Zend_Controller_Router_Route_Static('marseille.php',array('action'=> 'index','controller'=> 'users')); $router->addRoute('marseille', $route);
dans le script de ma vue :
<a href="<?php echo $this->baseUrl();?>/paris.php">Paris</a> <a href="<?php echo $this->baseUrl();?>/marseille.php">Marseille</a>
Alors il me redirige vers la pages souhaitées sans confusion entre http://localhost/exemple/public/paris.php et http://localhost/exemple/public/marseille.php.
Mais encore j'aurai le même problème du code, je dois pour chaque page mettre son code dans mon index.php,donc si j'aurai 60 pages à personnaliser également 120 lignes ou plus dans mon bootstrap qui est lourd comme même et je souhaite utiliser Zend_Controller_Router_Route_Regex.
Vous pouvez m'aider à résoudre ce problème,et surement c'est un sujet très important parce que on ne trouve rien sur le net sauf la solution que j'ai proposé qui est malheureusement incomplète ou lourde.
Merci.Nll
Dernière modification par elec (03-12-2009 17:35:36)
Hors ligne
Bonjour tout le monde,
je me sens que je suis en train de mettre le problème et la solution au même temps,vraiment ce sujet est très important et la classe Zend_Controller_Router est un peu sombre même pour les vrais zenders ici!
Dans le message en haut j'ai parlé sur Zend_Controller_Router_Static et Zend_Controller_Router_Regex.Alors que maintenant j'ai trouvé une autre solution un peu plus claire et réalisable avec Zend_Controller_Router_Route :
Bref j'ai voulu prendre un exemple d'un fiche d'utilisateur pour personnaliser ces pages,alors j'ai utilisé un fichier de configuration "routes.ini" qui est un peu plus facile :
dans mon bootstrap.php :
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 pour mon ficher routes.ini(indépendant de notre fichier .ini de l'application) :
routes.acceuil.type = "Zend_Controller_Router_Route" routes.acceuil.route = "/accueil.php" routes.acceuil.defaults.controller = index routes.acceuil.defaults.action = index routes.utilisateur.type = "Zend_Controller_Router_Route" routes.utilisateur.route = "fiche/utilisateur.php" routes.utilisateur.defaults.controller = users routes.utilisateur.defaults.action = index routes.ajouter.type = "Zend_Controller_Router_Route" routes.ajouter.route = "fiche/ajouter.php" routes.ajouter.defaults.controller = users routes.ajouter.defaults.action = create
et dans le script de la vue(par exemple pour la page de l'utilisateur) :
<a href="<?php echo $this->baseUrl();?>/fiche/utilisateur.php">La fiche d'utilisateur</a>
Il me reste à personnaliser la page de modification d'utilisateur ou je dois devant chaque ligne qui contient les infos de chaque utilisateur(nom,prénom,mot de passe...) un lien pour la page de modification donc j'ai personnalisé cette page par une autre façon en utilisant "Zend_Controller_Router_Regex" comme ceci "http://localhost/exemple/public/fiche/modifier-"id".php,et voilà le code:
protected function _initRouters() { $router = Zend_Controller_Front::getInstance()->getRouter(); $route = new Zend_Controller_Router_Route_Regex('fiche/modifier-(\d+).php?', array( 'controller' => 'users', 'action' => 'edit' ), array( 1 => 'id', ), 'fiche/modifier-%s.php'); $router->addRoute('fiche', $route);
et dans le script de ma vue :
<?php foreach ($this->usersArray as $users) : ?> <a href="<?php echo $this->url(array('id' =>$users->id), 'fiche', true); ?>">Modifier</a> <?php endforeach; ?>
Je souhaite que j'ai bien expliqué et je serai disponible pour toute explication mais au même temps il me reste tout cela un peu lourd alors si vous avez une solution complète ou on utilisera moins de code et plus réalisable.
Merci.Nll
Dernière modification par elec (03-12-2009 17:32:00)
Hors ligne
Pages: 1