Design pattern MVC, URLs et Controleur Frontal

WRInaute accro
Bonjour

Tout d'abord petite précision, je cherche pour mes projets à mettre en place le modele MVC ou du moins avoir un code propre et bien organisé.
Je sais très bien qu'il existe des framework de qualité (symphonie, zend, cakephp etc.).
Ce n’est donc pas le propos ;)

Après avoir lu et relus plusieurs fois plusieurs tutoriels sur la méthode MVC :

http://bpesquet.developpez.com/tutoriels/php/evoluer-architecture-mvc/
http://fr.openclassrooms.com/informatique/cours/adopter-un-style-de-pr ... modele-mvc
http://www.grafikart.fr/tutoriels/php/mvc-model-vue-controller-php-132
http://fr.openclassrooms.com/informatique/cours/votre-site-php-presque ... -pratiques

Je pense avoir compris le principe et le rôle des contrôleurs, modèles, vues, routeur et controleur frontal (généralement index.php)
Je bloque pour le moment sur ce point : les URL et le controleur frontal (et le routage associé)

La plupart des tutoriels donnent ce type d’exemple :

Code:
nomsite.com/controleur/action/id

dans un cas concret :

Code:
nomsite.com/blog/billet/3

Blog et billet etant statique il est donc aisé de créer le contrôleur blog et l'action billet.
Alors pour ces exemples ca semble donc facile à comprendre.

Mais comment utiliser cette architecture si on veut des URL de ce type :

Code:
nomsite.com/nomcategorie/nomrubrique

Sachant que nomcategorie et nomrubrique est variable, il s'agirait donc de paramètres dynamiques.

Exemple si on prend une boutique :

Code:
nomsite.com/chaussures/enfants
Comment dans ce cas la déterminer un contrôleur et une action ? Doit-on obligatoirement avoir une Url a rallonge de ce type :

Code:
nomsite.com/categorie-rubrique/liste/chassures/enfants
Controleur=categorie-rubrique
Action = liste
arg1=chaussures
arg2=enfants

ou autre possibilité :

Code:
nomsite.com/cat-chassures/rub-enfants/liste

Idem si pour les articles je veux ce type d'URL :

Code:
nomsite.com/titrearticle-id

Difficile également d'identifier un contrôleur et une action. Est-on obligé d'avoir :

Code:
nomsite.com/articles/billet/titre-article-id

exemple avec une URL de WRI :

https://www.webrankinfo.com/dossiers/techniques/seo-produits-supprimes

ici on peut très bien imaginer le contrôleur "dossiers". mais pour l'action? "technique"s semble être une rubrique dynamique, il est donc difficile de créer une action "techniques"

Et lorsqu'on part sur du MVC 2 avec controleur frontal doit-on forcement avoir pour son url rewriting de ce type :

Code:
# Réécrit une URL de type xxx/yyy/zzz en index.php?controleur=xxx&action=yyy&id=zzz
RewriteEngine on
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controleur=$1&action=$2&id=$3 [NC,L]

Comment gérer si on peu avoir un nombre d'arguments variable?
ou si on veut modifier un peu la structure lorsqu'on appelle certains controleurs.

Exmeple si je reprend l'exmeple suivant :

Code:
nomsite.com/categorie-rubrique/liste/chassures/enfants
Que je soujaite plutôt le mettre sous la forme :
Code:
nomsite.com/cat-chassures/rub-enfants/liste

Dois je créer une règle spécique dans le .httacess pour chaque controleur

Code:
# Réécrit une URL de type xxx/yyy/zzz en index.php?controleur=xxx&action=yyy&id=zzz
RewriteEngine on
news-([a-zA-Z0-9_-]*)-([0-9]+)\.html$
RewriteRule ^cat-([a-zA-Z0-9_-]*)/rub-([a-zA-Z0-9_-]*) .....  index.php?controleur=categorie-rubrique&action=$3&categorie=$1&rubrique=$2 [NC,L]
etc.

Vous sentez que c'est un peu confus dans ma tête ou pas? :mrgreen:

Pour le moment je serais plutôt tenter de partir sur un modèle MVC simple sans contrôleur frontal, de cette façon j'ai l'impression d'être plus libre dans la gestion des URL, des paramètres etc. Mais ce n’est évidemment pas la solution idéale et la plus facile à maintenir et a faire évoluer.


Autre point est-ce courant d'avoir plusieurs modèles dans un même contrôleur ? Ou est-ce contraire au modèle MVC ? Faut-il forcément 1 seul modèle pour 1 contrôleur?

Code:
ControlleurBillet.php

require_onde ('modele/modele1.php') ;
require_once ('odele/modele2.php')

object1= news class_model1(param1, param2, param 3) ;
object2=news class_model2(object1) ;

require_once  (' vue/vueBillet') ;

J'ai également l'impression que le modèle (design patern) MVC impose enfin de compte un grand nombre d'include (ou require). Ce que je trouve pas forcément très jojo.
 
WRInaute accro
C'est généralement des routes définies selon un regex:
CakePHP: http://book.cakephp.org/2.0/en/development/routing.html
Laravel: http://laravel.com/docs/routing
Symfony: http://symfony.com/doc/current/book/routing.html
...
Standalone:
http://upshots.org/php/php-seriously-simple-router
https://gist.github.com/dave1010/1214164

Ainsi le front controller/dispatcher peut parser ces URLs.

noren a dit:
Et lorsqu'on part sur du MVC 2 avec controleur frontal doit-on forcement avoir pour son url rewriting de ce type :

Code:
# Réécrit une URL de type xxx/yyy/zzz en index.php?controleur=xxx&action=yyy&id=zzz
RewriteEngine on
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controleur=$1&action=$2&id=$3 [NC,L]

Comment gérer si on peu avoir un nombre d'arguments variable?
ou si on veut modifier un peu la structure lorsqu'on appelle certains controleurs.

Plutôt parser:
- REQUEST_URI
- QUERY_STRING (index.php?/controller/action/param1/param2)
- PATH_INFO: index.php/controller/action/param1/param2

Nombre d'arguments illimités, le rewrite serveur est plus simple.

Pour les problèmes d'includes, il y a l'autoloading:
http://www.php.net/manual/fr/language.oop5.autoload.php
Ce que font de base les frameworks.

Je te conseille de jeter un oeil:
Composer: https://getcomposer.org/
Packagist: https://packagist.org/
 
WRInaute accro
Merci

Chaud chaud chaud cacao... :mrgreen:
je sens que je vais bien galérer.

Donc on peut normalement avoir n'importe quelle forme d'url souhaité? On peut dissimuler le contrôleur et l'action? et avec query_string si je comprend bien on gère x paramètres exact?

effectivement pour l'autoloading j'avais vaguement lu ca sur un des tutoriels et ça m'avait échappé. :wink:
 
Discussions similaires
Haut