Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous :-)
Sans doute cette question est-elle récurrente, mais j'ai passé la journée à cherche :-/
Zend utilise par défaut un modèle basé sur l'URL : module/controleur/action/parametres/separes/par/slash
ou à défaut : controleur/action/parametres/separes/par/slash
Or, je souhaiterais éviter de créer un ensemble contrôleur/vue par page (contenu) !... Car en réalité, j'ai plusieurs contenus mais qui peuvent tous aller dans la même vue. A noter que l'accès au contenu peut être hiérarchisé pour être ordonné : je peux y accéder par "page.htm" ou par "zone/page.htm".
l'idée est donc de pouvoir accéder aux pages standards par :
domaine.tld/page1
domaine.tld/page2
domaine.tld/zone1/page1
domaine.tld/zone1/page2
etc.
De cette façon dans mon controleur, j'ai juste à aller récupérer le chemin d'accès et à lire le fichier HTML ou effectuer la requête en base.
En fait, ça revient à avoir un modèle classique module/controleur/action/params mais avec le module, controleur et action par défaut.
Et en effet, si je teste domaine.tld/default/index/index/page1 ça fonctionne...
SAUF...
... Sauf que j'aimerais éviter ce moche /default/index/index/ dans mon URL !
Difficulté supplémentaire : je peux QUAND MEME avoir des modules et des controleurs spécifiques:
domaine.tld/admin/..... doit pouvoir appeler les controleurs et actions du module "admin", et pas un hypothétique contenu.
domaine.tld/recherche/..... doit pouvoir appeler le controleur "recherche" et ses actions.
etc.
L'idée serait donc d'avoir le fonctionnement suivant :
- Un module invalide renvoi vers le contrôleur (comme c'est le cas par défaut)
- Un controleur invalide renvoi vers l'action
- Une action invalide renvoi vers l'action par défaut
Soit l'algo de fonctionnement suivant :
- Prendre l'URL /a/b/c/d/e/f ....
- Teste si "a" est un module
- Si oui, utiliser le module "a" et continuer avec le reste de l'URL ("b" est-il un controleur ? etc.)
- Si non, utiliser le module par défaut "default" et teste si "a" est un controleur
- Si oui, utiliser le controleur a et continuer avec le reste de l'URL ("b" est-elle une action ?)
Jusque là c'est le fonctionnement standard.
Mais il faudrait aller plus loin :
- Si non (si "a" n'est pas un controleur"), utiliser le controleur par défaut "index" et teste si "a" est une action.
- Si oui, appeler l'action a (aAction())
- Si non, appeler l'action par défaut "index". Le reste de l'URL étant le paramètre
Et c'est donc dans ce cas limite IndexController::indexAction() qui va s'occuper de gérer le reste (-> Il me faut donc pouvoir appeler ErrorController depuis l'action, si par exemple le contenu n'existe pas)
Est-ce possible ?
Merci
PS: et idéalement, ce fonctionnement devrait pouvoir idéalement se répéter pour tout controleur/module :
- L'élément existe ? L'utiliser. N'existe pas ? Utiliser la valeur par défaut.
Par exemple, s'il existe un a/bController mais sans cAction, alors, il faut appeler a/bController::indexAction() avec c/d/e/f comme paramètre. S'il existe un module "a" mais sans "bController", alors, il faut appeler a/IndexController::indexAction() avec b/c/d/e/f comme paramètre. Etc. J'en demande peut-être trop ? :-p
Dernière modification par sarigue (21-03-2014 17:41:39)
Hors ligne
bonjour ton message étai trop long.
je crois que tu peut utiliser des fonction qui sont des action a créer dans ton controller et avoir une vue en fessan des switch ou des if imbriqués.
on ma parlé de mappage de lien. tu peu chercher dans ce sens la
Hors ligne