Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-05-2007 15:40:49

philsmile
Nouveau membre
Date d'inscription: 10-05-2007
Messages: 8

MVC et paramètres

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

 

#2 22-05-2007 17:15:31

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: MVC et paramètres

Effectivement tu dois gérer les routes.

Voilà un petit exemple avec un fichier routes.ini qui contient

Code:

[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

Code:

$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 smile


Société : Direct Info Service

Hors ligne

 

#3 22-05-2007 19:26:15

philsmile
Nouveau membre
Date d'inscription: 10-05-2007
Messages: 8

Re: MVC et paramètres

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

 

#4 28-05-2007 13:55:51

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: MVC et paramètres

Bonjour philsmile,

Voilà un exemple de code pour changer les routes sans fichier de conf (expliqué en dessous) :

Code:

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages