Bonjour,

J'utilise AltoRouter et je place toutes mes routes dans un fichier yaml. Pas de souci pour utiliser ça.

J'ai une route pour accéder à un module, une autre pour la liste des exercice du module et une dernière pour un exercice donné.
Dans mon fichier yaml j'ai donc ceci:

module: ["GET", "/[*:module_name]-[i:module_id]", "s/modules/home"]
exercicesListe:  ["GET", "/[*:module_name]-[i:module_id]/exercices/.[i:start]?", "s/exercices/home"]
exercice:  ["GET", "/[*:module_name]-[i:module_id]/exercices/[*:exercice_name]-[i:exercice_id]", "s/exercices/view"]

Ca correspond à:

$router->map( 'GET', '/[*:module_name]-[i:module_id]', 's/modules/home', 'module');
$router->map( 'GET', '/[*:module_name]-[i:module_id]/exercices/.[i:start]?', 's/exercices/home', 'exercicesListe');
$router->map( 'GET', '/[*:module_name]-[i:module_id]/exercices/[*:exercice_name]-[i:exercice_id]', 's/exercices/view', 'exercice');

Les routes que je génère sont bonnes, mais si je les laisse dans cet ordre je n'arrive pas à la route exercice avec par exemple un chemin de ce type: http://mon_domaine/Anglais_A1_A2-9/exercices/Contexte_01_Telephone-9, mais sur la page "module".
Si par contre je place ma route "exercice" avant, alors ça fonctionne.
La route "exercicesListe" ne pose par contre elle pas de problème.

Ma question est donc: est-ce normal?
Si oui, je trouve ça pas vraiment pratique car il est facile de faire des erreurs, et surtout je ne comprends pas pourquoi la route "exercicesListe" fonctionne.
Si non, si vous avez une idée de l'erreur que je commets...

Merci!

4 réponses


Lartak
Réponse acceptée

Bonsoir.
En général, il est préférable d'ordonner les routes, de la plus précise à celle qui l'est moins, donc dans ton exemple, tu devrais inverser tes 3 routes, soit :

  • exercice
  • exercicesListe
  • module
jouvrard
Auteur

Ok, c'est le conclusion que j'en avais tirée du fait de ce problème, je trouve cependant ça dommage car ça ne suit pas la"logique" du site mais bon, c'est pas comme si j'avais le choix. :)

Merci!

Les routes n'ont pas de logique de workflow. Donc une route a n'est pas appeler forcément avant une route b et inversement.

jouvrard
Auteur

Il doit tout de même y avoir un truc car ça fonctionne différemment suivant que je mette une route avant un autre ou pas.
J'ai encore fait des tests ce matin et toujours le même souci. Ou alors c'est un bug de Altorouteur pourquoi pas