Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Je galère un peu sur la récupération des paramètres dans l'URL.
Voici mon url de base où je fait appelle à l'action liste du controleur lexique: http://www.monsite.com/lexique/liste/
Jusqu'ici tout va bien.
Maintenant je veux rajouter un paramètre pour lister les mots du lexique commençant par une lettre passée en paramètre. Exemple : http://www.monsite.com/lexique/liste/a me permet de lister les mots du lexique commençant par a.
Là où cela me dérange un peu, c'est que je suis contraint de taper http://www.monsite.com/lexique/liste/lettre/a afin de récupérer le paramètre 'a'. J'utilise donc la méthode _getParam() ainsi _getParam('lettre', 'a');
N'y a t-il pas un moyen d'éviter d'ajouter l'élément 'lettre' dans l'url et d'avoir directement http://www.monsite.com/lexique/liste/a/.
Je m'oriente vers les routages mais je nage un peu. Votre aide me serait précieuse !!!
Hors ligne
Effectivement tu dois gérer les routes.
Voilà un petit exemple avec un fichier routes.ini qui contient
[routes] annonceById.route = annonce/:id ;le modèle de route annonceById.reqs.id = "[0-9]"+ ;la nature du paramètre id attendu ( des chiffres ici ) annonceById.defaults.controller = annonce ;le controller vers où ça doit aller annonceById.defaults.action = view ;l'action vers où ça doit aller
Dans mon bootstrap
$router = new Zend_Controller_Router_Rewrite(); $router->addConfig(new Zend_Config_Ini("../conf/routes.ini", null), 'routes'); //on charge la section routes du .ini $frontController = Zend_Controller_Front::getInstance(); $frontController->setControllerDirectory('../application/controllers') ->setRouter($router); //on fourni l'objet $router au frontController
Et tu récupère :id avec _getParam('id');
J'éspère être clair
Hors ligne
Merci de m'avoir éclairer sur ce point d'une manière assez claire.
Pour résumer :
1) Déclaration des paramètres du routage.
2) Instanciation un objet Controller Router Rewrite et déclaration des paramètres.
3) Récupération de l'instance du front controller afin de lui attribuer son chemin de routage.
Sur cela j'ai bien compris mais j'ai deux questions :
1) Il y a-t-il un autre moyen qu'un fichier de config pour affecter les paramètres au Router ReWrite ?
2) Si je veux implenter cela pour un unique controlleur, où dois-je déclarer le routage ? Dans la fonction d'initialisation du controleur en question ?
On va essayer tout cela pour y voir plus clair...
Hors ligne
Bonjour philsmile,
Voilà un exemple de code pour changer les routes sans fichier de conf (expliqué en dessous) :
Zend_Loader::loadClass('Zend_Controller_Front'); Zend_Loader::loadClass('Zend_Controller_Router_Rewrite'); $controller = Zend_Controller_Front::getInstance(); $router = new Zend_Controller_Router_Rewrite(); $router->addRoute( "basic", new Zend_Controller_Router_Route( ":controller/:action/:parameter1/:parameter2", array( "language"=>null, "controller"=>"index", "action"=>"index", "parameter1"=>null, "parameter2"=>null) ) ); $router->addRoute( "service", new Zend_Controller_Router_Route( "service/:command/:val/:val2", array( "controller"=>"service", "action"=>"json", "command"=>null, "val"=>null, "val2"=>null) ) ); $parsedUrl = parse_url(FRONT_URL); $controller->setBaseUrl($parsedUrl["path"]."/"); $controller->setRouter($router); $controller->setControllerDirectory('PHP-INF/controller'); $controller->throwExceptions(true);
la 1ere route ajoutée permet de parser les routes du genre : http://monsite/controller/action/12/15
et donc dans ton controlleur, un $this->_getParam("parameter1") te renvoie 12.
La 2e route parse les URL du genre http://monsite/service/totoCommand/14
dans ce cas, c'est le controlleur "ServiceController" et l'action jsonAction qui sont appelés et $this->_getParam("val") renvoie 14.
Dis moi si c'est pas clair,
A+, Philippe
Hors ligne