Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-02-2010 18:53:36

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

[Zend_Route] interdire un ou plusieurs mots dans un paramètre

Bonjour,

alors voila ma problématique

J'ai 3 routes standards, dans mon routes.ini

Code:

actus_tous.route = "actualites/*"
actus_tous.defaults..... ; on définit les modules, controller... par défaut

actus_par_cat.route = "actualites/:categorie/*"
actus_par_cat.defaults.....
actus_par_cat.reqs.categorie = "[-\w]*"

actus_par_cat_theme.route = "actualites/:categorie/:theme/*"
actus_par_cat_theme......
actus_par_cat_theme.reqs.categorie = "[-\w]*"
actus_par_cat_theme.reqs.theme= "[-\w]*"

J'ajoute à la fin des route l'opérateur "*" afin de pouvoir ajouter des paramètres facultatifs genre numéro de page pour le paginator, tri desc ou asc etc...

"/actualites/" => matche bien la route actus_tous

"/actualites/videos/" => matche bien la route actus_par_cat

"/actualites/videos/ski-nautique" => matche la route actus_par_cat , au lieu de actus_par_cat_theme.


Je me dis que c'est à cause de l'opérateur "*", qui autorise tout à la fin du shéma de la route actus_par_cat

Donc ce que je voudrais, c'est dans les reqs de categorie et theme interdire le mot "page" ainsi que le caractères "/".

Simplement en expression regulière, aucun tutos ni aucune recherche google ne dit comment interdire un ou plusieurs mots, seulement des classes ou des lettres. Donc [^page] interdira les lettres p a g et e , mais pas le mot page.

Ce qui est bizarre et qui pourrait déplacer l'origine du problème, c'est qu'en enlevant la route actus_par_cat, un "/actualites/videos/ski-nautique" ne matche toujours pas actus_par_cat_theme, mais se déporte cette fois vers actus_tous.

Merci d'avance pour votre aide

edit : En fait, même en enlevant tous les reqs et en virant la route actus_par_cat_theme, avec l'url "/actualites/videos/ski-nautique" je matche toujours la route actus_tous, la route actus_par_cat_theme pose probleme.
Même en inversant les positions des deux routes.


J'ai du mal à comprendre hmm

Dernière modification par supertino7 (24-02-2010 19:07:18)

Hors ligne

 

#2 25-02-2010 03:00:09

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Zend_Route] interdire un ou plusieurs mots dans un paramètre

Wow, je dois dire que tu as un sacré problème qui mérite très certainement d'être dans ce forum.

J'ai déjà eu ton problème à vrai dire mais je n'ai pas chercher ce que tu veux. J'ai plustôt contourner le problème en créant d'autres routes très spécifique à mon url que je voulais.

Par exemple, j'ai créer un route qui avait très spécifiquement ceci dans ton cas: actualites/videos/:titrevideo

Seulement, dans ton cas, je sais pas combien tu as de catégorie. Moi j'en avais seulement 3 alors créer 3 routes de plus ma pas dérangé.

Sinon, si tu as trop de routes et que tu ne trouves pas la solution. J'ai créerait alors dynamiquement mes routes à partir des informations sur mes catégories via une base de donnés par exemple...

Mais si tu réussis à trouver la solution pour bloquer des mots acceptés par *, ce serait vraiment bien à savoir

J'espère que ta recherche va porter fruit !

Hors ligne

 

#3 25-02-2010 11:19:17

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: [Zend_Route] interdire un ou plusieurs mots dans un paramètre

Beh personnellement, j'ai quelquechose comme 14 catégories et 77 thèmes qui sont dynamiques et évolutifs big_smile. Donc l'idée de créer une route pour chaque cat/theme, à laquelle j'y ai déjà pensé par dépit, ne serait pas du tout flexible.

En virant la route actus_tous, l'url "/actualites/videos/ski-nautique" matche bien la route actus_par_cat_theme, c'est donc bien l'étoile qui pose problème.

Une chose que je ne comprends pas, c'est que c'est censé être une pile LIFO, dernier spécifié premier analysé. La route actus_par_cat_theme est spécifiée après actus_tous, pourquoi elle n'est pas matchée en premiere alors ?

Hors ligne

 

#4 25-02-2010 16:36:12

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Zend_Route] interdire un ou plusieurs mots dans un paramètre

c'est que c'est censé être une pile LIFO, dernier spécifié premier analysé

Je ne savais pas ça, mais je crois que c'est seulement valide dans le cas où tes routes sont plus précise que simplement une *

Sinon, la solution des créer tes 14*77 routes pourrait être fait dynamique si tu ne trouves pas de solutions...

Hors ligne

 

#5 25-02-2010 16:59:17

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: [Zend_Route] interdire un ou plusieurs mots dans un paramètre

probitaille a écrit:

c'est que c'est censé être une pile LIFO, dernier spécifié premier analysé

Je ne savais pas ça, mais je crois que c'est seulement valide dans le cas où tes routes sont plus précise que simplement une *

Sinon, la solution des créer tes 14*77 routes pourrait être fait dynamique si tu ne trouves pas de solutions...

je pense à cette solution.
Du coup, qu'est ce que tu me conseillerai, pomper les cat et les theme dans la base et créer les routes pour chaque, tout ça dans le bootstrap ?
Ca risque d'être lourd à force non ? à moins d'utiliser de la mise en cache, mais je maitrise pas encore hmm

Hors ligne

 

#6 25-02-2010 17:45:56

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Zend_Route] interdire un ou plusieurs mots dans un paramètre

Probablement que ceci va alourdi un peu les choses, je ne sais pas et je ne dis nullement que c'est la meilleure solution mais ce serait le choix de rechange pour pas perdre trop de temps.

Pour ma part, j'ai obligatoirement besoin de me relié avec la base de donnés dans le bootstrap mais pour mon système de naviguation qui génère mon menu, breadcrump, et comme mon système me permet d'ajouter des pages, je n'ai pas le choix. Je dois dire que je ne vois pas pas la perte de performance dans mon cas.

Tu pourrais en faire un test pour voir. Si tu ne veux pas mettre trop de code dans le bootstrap, tu peux toujours mettre dans un plugin comme j'ai fait mais pour d'autres raisons.

C'est vrai que le système de cache peut t'aider mais logiquement, tu dois construire l'application la plus légère possible sans se dire que le cache va permettre de contourner un problème de performance.

À toi d'évaluer les solutions 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