Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-02-2009 19:43:43

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Zend_C_R_Route avec des tirets ?

Bonsoir,

Ce soir, je rencontre un problème étrange... J'aimerais réaliser une route de ce type : 'news-:id-:title.html'

Et il se fait que le :id et le :title contenu dans la route n'est pas transformé par les valeur que je lui passe. Par contre, si je modifie ma route en remplaçant les tirets par des "/", cela fonctionne.

A quoi cela est-du ? Est-ce que j'ai une modification de configuration à faire ?


Merci d'avance.

Hors ligne

 

#2 28-02-2009 23:56:42

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: Zend_C_R_Route avec des tirets ?

Quel type de route utilises-tu? Je crois qu'il faut utiliser un regexp pour cela. À confirmer.

Hors ligne

 

#3 01-03-2009 10:09:08

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: Zend_C_R_Route avec des tirets ?

Effectivement, j'utilisais les routes standard... Quand je passe en regex, cela fonctionne.

Merci.

Hors ligne

 

#4 07-03-2009 18:17:54

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: Zend_C_R_Route avec des tirets ?

Bonsoir à tous,

Je me permets de reprendre mon post initial pour remonter un autre problème. J'ai deux routes comme ceci :

Code:

routes.categorypage.type = "Zend_Controller_Router_Route_Regex"
routes.categorypage.route = "(.+)-(\d+)-(\d+).html"
routes.categorypage.defaults.module = "default"
routes.categorypage.defaults.controller = "category"
routes.categorypage.defaults.action  = "index"
routes.categorypage.map.1 = "name"
routes.categorypage.map.2 = "id"
routes.categorypage.map.3 = "page"
routes.categorypage.reverse = "%s-%d-%d.html"

routes.category.type = "Zend_Controller_Router_Route_Regex"
routes.category.route = "(.+)-(\d+).html"
routes.category.defaults.module = "default"
routes.category.defaults.controller = "category"
routes.category.defaults.action  = "index"
routes.category.map.1 = "name"
routes.category.map.2 = "id"
routes.category.reverse = "%s-%d.html"

Quoi que je fasse, il passe toujours par la deuxième route (category). C'est à dire que si j'ai l'url suivante : cat-1-2.html, il me prend la seconde qui n'a que 2 paramètres et non la première qui a bien 3 paramètres.

Je n'arrive pas à comprendre pourquoi il ne match pas avec la première hmm

Merci d'avance

Hors ligne

 

#5 07-03-2009 19:39:04

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: Zend_C_R_Route avec des tirets ?

le router fonctionne avec une pile (FIFO), et aussitôt qu'il trouve une route qui convient il arrête de chercher, donc il faudrait que tu inverses tes routes dans ton fichier.

Hors ligne

 

#6 07-03-2009 21:27:44

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: Zend_C_R_Route avec des tirets ?

Bah oui, donc justement...

Comme j'envoie une url de la forme cat-1-2.html, il devrait s'arrêter dès la premier route non ? Pourquoi va-t'il jusqu'à la deuxième ?

Hors ligne

 

#7 07-03-2009 23:27:34

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: Zend_C_R_Route avec des tirets ?

Les routes sont ajoutées dans l'ordre qu'ils sont dans ton fichier, donc la première route se retrouve en dessous de la pile et la dernière au dessus de la pile. Donc dans ton cas, le router analyse category en premier et ensuite categorypage. Essaie:

Code:

routes.category.type = "Zend_Controller_Router_Route_Regex"
routes.category.route = "(.+)-(\d+).html"
routes.category.defaults.module = "default"
routes.category.defaults.controller = "category"
routes.category.defaults.action  = "index"
routes.category.map.1 = "name"
routes.category.map.2 = "id"
routes.category.reverse = "%s-%d.html"

routes.categorypage.type = "Zend_Controller_Router_Route_Regex"
routes.categorypage.route = "(.+)-(\d+)-(\d+).html"
routes.categorypage.defaults.module = "default"
routes.categorypage.defaults.controller = "category"
routes.categorypage.defaults.action  = "index"
routes.categorypage.map.1 = "name"
routes.categorypage.map.2 = "id"
routes.categorypage.map.3 = "page"
routes.categorypage.reverse = "%s-%d-%d.html"

Hors ligne

 

#8 08-03-2009 09:23:20

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: Zend_C_R_Route avec des tirets ?

Hmm d'accord smile

Mais j'obtiens cette exception alors :

Exception de type Zend_Controller_Router_Exception Cannot assemble. Too few arguments? envoyée dans /home/sites/devtest/www/portails/ZendFramework-1.7.3PL1/library/Zend/Controller/Router/Route/Regex.php à la ligne 184

Alors que c'est bizarre, j'ai bien mes 3 arguments dans l'url.

Dans la trace, je vois bien qu'il ne détecte que 2 arguments à première vue. Il ne me trouve pas le troisième (page) hmm

Hors ligne

 

#9 08-03-2009 17:49:32

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: Zend_C_R_Route avec des tirets ?

je crois que c'est un problème avec ton regex, il faudrait que tu le teste et l'ajuste en conséquence:
http://www.regular-expressions.info/jav … ample.html

Hors ligne

 

#10 08-03-2009 18:09:06

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: Zend_C_R_Route avec des tirets ?

Il n'y a aucun problème avec le regex, c'est ça le pire hmm

Hors ligne

 

#11 10-03-2009 16:47:10

Damien
Membre
Lieu: Tassin la Demi Lune
Date d'inscription: 22-03-2007
Messages: 88

Re: Zend_C_R_Route avec des tirets ?

je crois qu'il faut mettre un \ devant .html. Ce qui donne :

Code:

routes.category.route = "(.+)-(\d+)\.html"
routes.categorypage.route = "(.+)-(\d+)-(\d+)\.html"

En tout cas, c'est ce que j'ai mis.

Hors ligne

 

#12 10-03-2009 18:11:24

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: Zend_C_R_Route avec des tirets ?

Ca ne change rien, toujours l'exception cité plus haut :s

Hors ligne

 

#13 10-03-2009 22:44:04

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: Zend_C_R_Route avec des tirets ?

J'ai déjà eu se problème et il provenait de l'aide de vue url, lorsque je lui envoyais les paramètres avec leur nom comme dans ton cas "name", "id", "page" ça ne fonctionnait pas, par contre si tu envoies un tableau sans clé dans le bon ordre, ça devrait fonctionner.

Code:

$this->url(array(tonName, tonId, taPage), nomDeLaRoute);

Je ne sais pas d'où vient cette erreur.

Hors ligne

 

#14 10-03-2009 23:14:32

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: Zend_C_R_Route avec des tirets ?

Ton exemple m'a fait voir une erreur de frappe dans une des clés du helper hmm

Bon ben, merci beaucoup du coup de main en tout cas wink

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