Salut
J'ai des doutes concernant mes choix sur les contrôleurs de mon mini framework personnel.
Prenons un site (un peu construit comme WRI, a titre d’exemple) qui aurait les sections suivantes :
blog → contient plusieurs categories (cat1, cat2, cat3...)
dossiers → contient plusieurs categories (cat1, cat2, cat3...)
annuaire → contient plusieurs categories (cat1, cat2, cat3...)
news
Dans mon MVC j'aurais tendance à créer 4 contrôleurs
Avec ce schéma je me retrouve avec des URL qui n'ont pas besoin de routing, juste mon contrôleur frontal qui dirige bien vers le bon contrôleur et la bonne action.
je pourrais avoir des url de la sorte, sans que ça soit gênant :
site.ndd/blog/index
site.ndd/blog/categorie/cat1
site.ndd/blog/categorie/cat1/2 <--- pour la page 2
site.ndd/blog/post/slug/id
les paramètres passés aux actions sont vérifiés dans chaque contrôleur. Et si nécessaire je fais des 301
Alors a priori ce schéma semble pas trop mauvais MAIS voilà avec un tel schéma je me retrouve pour le moment avec pas mal de traitement identiques dans ces contrôleurs.
Pas mal de similitude dans le traitement situé dans les méthodes qui ont le même nom.
Si je prend par exemple la méthode categorie, elle fera appel quasiment aux mêmes modèles et fera quasiment le même traitement, a quelques petits paramétrages prêt, quelque soit le contrôleur.
(Certes je suis quand même libre de traiter totalement différemment du jour au lendemain une des sections avec cette méthode.)
Pour palier à ce problème de redondance je met dans des fichiers à inclure (de façon pas très propre) les bouts de traitement identiques
exemple :
Je trouve donc cet appel pas très propre : require(CHEMIN_INTER."include/traitCategorie.php");
d'autant plus qu'il s'agit d'un appel d'une page PHP qui n’est ni une fonction, ni une classe, mais simplement des lignes de codes php (appel aux méthodes des modèles etc.).
Si on regarde CackePHP il semblerait que le schéma à appliquer serait plutôt le suivant :
Articles = (de préférence) le nom de la table dans la BDD, sachant que tous les articles du blog, des dossiers, de l'annuaire ou des news seraient dans la table articles.
Mais j'ai plusieurs problèmes avec le schéma de CakePhP:
1) sans routing on aurait surement des url plutôt moches comme :
site.ndd/articles/index/blog
site.ndd/articles/categorie/blog/cat1
etc.
Avec cette solution a mon avis il faudrait ajouter en paramètre supplémentaire: la section (ici blog, dossiers etc.).
Et là a priori le routing s'impose (et je suis pas a l'aise avec ca)
2) Quoi qu'il en soit avec cette solution comment arriver avec un seul contrôleur a bien différencier les sections blog, dossiers etc. car même si une bonne partie du traitement dans chaque méthode serait identique, les vues et les informations a afficher ne sont pas forcément toujours les mêmes (qu'il s'agisse du menu, du nombre d'articles a afficher, etc.). je pourrais également vouloir faire un traitement très spécifique pour une des sections...
Alors je me sens plus à l'aise avec la 1ere solution, mais ça ne semble pas être un MVC très propre.
Qu'en pensez vous ?
J'ai des doutes concernant mes choix sur les contrôleurs de mon mini framework personnel.
Prenons un site (un peu construit comme WRI, a titre d’exemple) qui aurait les sections suivantes :
blog → contient plusieurs categories (cat1, cat2, cat3...)
dossiers → contient plusieurs categories (cat1, cat2, cat3...)
annuaire → contient plusieurs categories (cat1, cat2, cat3...)
news
Dans mon MVC j'aurais tendance à créer 4 contrôleurs
Code:
class ControleurBlog extends controleur {
public function index() {}
public function categorie() {}
public function post() {}
}
class ControleurDossiers extends controleur {
public function index() {}
public function categorie() {}
public function post() {}
}
class ControleurAnnuaire extends controleur {
public function index() {}
public function categorie() {}
public function post() {}
}
class ControleurNews extends controleur {
public function index() {}
public function post() {}
}
Avec ce schéma je me retrouve avec des URL qui n'ont pas besoin de routing, juste mon contrôleur frontal qui dirige bien vers le bon contrôleur et la bonne action.
je pourrais avoir des url de la sorte, sans que ça soit gênant :
site.ndd/blog/index
site.ndd/blog/categorie/cat1
site.ndd/blog/categorie/cat1/2 <--- pour la page 2
site.ndd/blog/post/slug/id
les paramètres passés aux actions sont vérifiés dans chaque contrôleur. Et si nécessaire je fais des 301
Alors a priori ce schéma semble pas trop mauvais MAIS voilà avec un tel schéma je me retrouve pour le moment avec pas mal de traitement identiques dans ces contrôleurs.
Pas mal de similitude dans le traitement situé dans les méthodes qui ont le même nom.
Si je prend par exemple la méthode categorie, elle fera appel quasiment aux mêmes modèles et fera quasiment le même traitement, a quelques petits paramétrages prêt, quelque soit le contrôleur.
(Certes je suis quand même libre de traiter totalement différemment du jour au lendemain une des sections avec cette méthode.)
Pour palier à ce problème de redondance je met dans des fichiers à inclure (de façon pas très propre) les bouts de traitement identiques
exemple :
Code:
public function categorie()
{
/**** Configuration du traitement ****/
//ici j'initialise quelques variables par rapport au besoin du controleur en question
$nbArtParPage = 20 ;
etc.
/**** On inclu le traitement ****/
//lignes de traitement identiques utilisé par chaque controleur faisant appel a la méthode categorie
require(CHEMIN_INTER."include/traitCategorie.php");
/**** On génère la vue ****/
//ici j'appelle la methode genererVue de Controleur qui appelle la la vue situté dans vue/nomcontroleur/categorie.php
$this->genererVue("categorie", $d);
}
Je trouve donc cet appel pas très propre : require(CHEMIN_INTER."include/traitCategorie.php");
d'autant plus qu'il s'agit d'un appel d'une page PHP qui n’est ni une fonction, ni une classe, mais simplement des lignes de codes php (appel aux méthodes des modèles etc.).
Si on regarde CackePHP il semblerait que le schéma à appliquer serait plutôt le suivant :
Code:
class ControleurArticles {
public function index() {}
public function categorie() {}
public function post() {}
}
Articles = (de préférence) le nom de la table dans la BDD, sachant que tous les articles du blog, des dossiers, de l'annuaire ou des news seraient dans la table articles.
Mais j'ai plusieurs problèmes avec le schéma de CakePhP:
1) sans routing on aurait surement des url plutôt moches comme :
site.ndd/articles/index/blog
site.ndd/articles/categorie/blog/cat1
etc.
Avec cette solution a mon avis il faudrait ajouter en paramètre supplémentaire: la section (ici blog, dossiers etc.).
Et là a priori le routing s'impose (et je suis pas a l'aise avec ca)
2) Quoi qu'il en soit avec cette solution comment arriver avec un seul contrôleur a bien différencier les sections blog, dossiers etc. car même si une bonne partie du traitement dans chaque méthode serait identique, les vues et les informations a afficher ne sont pas forcément toujours les mêmes (qu'il s'agisse du menu, du nombre d'articles a afficher, etc.). je pourrais également vouloir faire un traitement très spécifique pour une des sections...
Alors je me sens plus à l'aise avec la 1ere solution, mais ça ne semble pas être un MVC très propre.
Qu'en pensez vous ?