Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-07-2009 23:55:09

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

[ZF 1.8] Comment définir le Router dans le Bootstrap

Bonjour à tous,

j'aimerais définir mes propres routes pour mon application. Pour ca j'ai créer le fichier "/application/configs/routes.ini" qui contient ceci :

Code:

[routes]
routes.compat.route = ":language/:sport/:module/:controller/:action/*"

J'ai ensuite rajouté le code suivant dans mon boostrap mais rien ne marche. Les nouveaus paramètre "language" et "sport" ne sont pas pris en compte...

Code:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
------
    protected function _initRouter()
    {
        //     Récupération d'une instance du controleur frontal (singleton)
        $frontController = Zend_Controller_Front::getInstance();

        $router = new Zend_Controller_Router_Rewrite();
        $router->addConfig(new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'), 'routes');

        $frontController->setRouter($router);
    }
-----
}

Quelle est la bonne méthode ?

Merci d'avance.

Hors ligne

 

#2 08-07-2009 08:03:47

pastel
Membre
Date d'inscription: 24-06-2009
Messages: 12

Re: [ZF 1.8] Comment définir le Router dans le Bootstrap

Ta règle semble étrange.....
A quoi ressemble l'URL réel et l'URL que tu souhaite?

Hors ligne

 

#3 08-07-2009 08:07:26

neni
Membre
Lieu: Nantes
Date d'inscription: 12-11-2007
Messages: 27

Re: [ZF 1.8] Comment définir le Router dans le Bootstrap

Il me semble qu'il faut utiliser la méthode "_initRoutes()" au lieu et place de "_initRouter()" dans le bootstrap.

Hors ligne

 

#4 08-07-2009 08:24:55

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [ZF 1.8] Comment définir le Router dans le Bootstrap

Non non quelque soit le '_initXXXXXX' il sera évalué smile

Néanmoins une petite chose m'interpelle, si tu fais ça, est-ce qu'un changement apparait ?

Code:

    protected function _initRouter()
    {
        $this->bootstrap('FrontController');
        $front = $this->getResource('FrontController');

        $options = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'), 'routes');
        $router = $front->getRouter();
        $router->addConfig($options);

        return $router;
    }

Dernière modification par yvann (08-07-2009 08:25:16)

Hors ligne

 

#5 08-07-2009 12:34:40

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [ZF 1.8] Comment définir le Router dans le Bootstrap

@pastel : L'url est pour l'instant sous la forme suivante :
http://monsite/news/
(module -> news ; controller -> index ; action -> index)
et je souhaiterais avoir ceci :
http://monsite/fr/sport1/news
(language -> fr ; sport -> sport1 ; module -> news ; controller -> index ; action -> index)

@Yvann : Je ne suis pas chez moi actuellement donc je ne pourrais pas tester avant ce soir. J'avoue que je n'ai pas encore bien compris le fonctionnement du bootstrap. Tout ce que je sais c'est qu'il execute automatiquement les méthodes commencant par "_init". Après ca, je ne sais pas ce que la méthode doit retourner.
Je vais donc tester ton code ce soir mais avant, juste une question :
Que veut dire cette ligne : $this->bootstrap('FrontController'); ?

Hors ligne

 

#6 08-07-2009 15:05:56

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [ZF 1.8] Comment définir le Router dans le Bootstrap

Cette ligne sert à "lancer" la resource "FrontController", afin d'être certain qu'à l'appel de celle-ci via le

Code:

$front = $this->getResource('FrontController');

elle soit bien retournée.

Attention toutefois à ne pas faire d'appel cyclique ( la resource Frontcontroller qui lancerait elle un

Code:

$this->bootstrap('Router');

), enfin à vrai dire tu as une exception te le précisant donc l'erreur est rapidement réglée.

Dernière modification par yvann (08-07-2009 15:07:03)

Hors ligne

 

#7 08-07-2009 23:07:27

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [ZF 1.8] Comment définir le Router dans le Bootstrap

Il y avait une légère erreur de syntaxe dans le code que tu présentés yvann. Voici ce que j'ai écrit :

Code:

        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 ca marche parfaitement mais par contre, je dois mettre le chemin complet : "http://monsite/fr/sport1/news/index/index"

Si j'appel l'adresse "http://monsite/fr/sport1/news", j'ai le message d'erreur suivant :

Code:

#An error occurred
Page not found
;
#Exception information:
Message: Invalid controller specified (fr)
----
#Request Parameters:

array(3) {
  ["controller"]=>
  string(2) "fr"
  ["action"]=>
  string(3) "sport1"
  ["module"]=>
  string(8) "frontend"
}

J'y suis presque mais je ne comprends pas encore parfaitement le comportement du routeur.

Dernière modification par slaughter (09-07-2009 00:43:12)

Hors ligne

 

#8 09-07-2009 11:19:02

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [ZF 1.8] Comment définir le Router dans le Bootstrap

Quelle était l'erreur de syntaxe ?

Sinon peux-tu nous montrer ton "routes.ini" ?

Hors ligne

 

#9 09-07-2009 11:36:58

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [ZF 1.8] Comment définir le Router dans le Bootstrap

Juste une erreur de copier/coller :

Code:

$options = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'), 'routes');

petit problème de parenthèse.. et le dernier 'routes' n'est pas à placer ici. Je pense que tu voulais faire ça :

Code:

$options = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes');
$router = $front->getRouter();
$router->addConfig($options,'routes');

Voici le contenu de mon routes.ini :

Code:

[routes]
routes.site.route = ":language/:sport/:module/:controller/:action/*"

Hors ligne

 

#10 09-07-2009 14:59:53

yvann
Membre
Date d'inscription: 24-07-2008
Messages: 81

Re: [ZF 1.8] Comment définir le Router dans le Bootstrap

As tu des valeurs par défaut ?

Code:

routes.site.route = ":language/:sport/:module/:controller/:action/*"
routes.site.defaults.module = news
routes.site.defaults.controller = index
routes.site.defaults.action = index

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