Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/04/2008, 12h09   #1
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 42
Points : 16
Points : 16
Par défaut Vos avis sur mon implémentation MVC en PHP5

Bonjour,

Je ne sais pas si ce post à sa place dans ce forum si ce n'est pas le cas je m'excuse par avance.

Voilà j'aimerais avoir vos avis concernant ma manière de pratiquer la conception MVC avec PHP5. Cette pratique est nouvelle pour moi.

J'ai lu les différents tutoriaux de developpez ainsi que ceux sur Zend Framework.
Je ne souhaite pas utiliser Zend pour diverses raisons dont le fait que je travaille sur de "petits" projets persos. Je pense avoir bien compris comment ça doit fonctionner mais je veux être sur.

Je vais donc vous expliquer comment je procède mais avant ma première question concerne le Front Controller, est-il obligatoire dans le modèle MVC ? Ou peut-on avoir simplement un controller par page ?

Pour l'exemple concret, je travaille sur un moteur de forum. Voilà comment j'ai découper la première page c'est à dire celle qui liste les forums (et les catégories et sous-catégories dans mon cas)
-un bloc Header (haut de page) (rien à voir avec les headers http) avec le menu du forum
-un bloc Path qui indique l'endroit où on se trouve par rapport à l'index. (Index > Nom de la Catégorie > nom de la sous catégorie > nom du Forum > Sujet > etc...)
-Un bloc ListOfCategories (donc liste des catégories , sous catégories et forums)
-Un Bloc Footer

Pour chaque bloc, j'ai au moins une classe modèle et une classe vue.

Pour mon index.php j'ai donc le IndexController, une facade qui gère les différents modèles dont les vues ont besoin IndexFacade, une vue générale IndexFrontView qui elle gère les différents vues des blocs ci-dessus et génère le HTML. Je n'utilise pas de moteurs de templates pour générer mon code mais une collection d'objets représentant chacun un élément HTML et ce qu'il contient. Chaque vue renvoit un objet Div que le FrontView se contente de concaténer dans le body de la page.

En fait avec un schéma ça sera plus clair :
Schema MVC.png

Déjà est ce que c'est une bonne approche du modèle MVC ?

Ensuite mes doutes se situe plus au niveau de la manière de passer les données des modèles aux vues. Pour le moment, chaque modèle à une méthode GetData qui renvoie un ArrayObject contenant toutes les données que la vue correspondante à besoin. La vue les récupère dans un SetData().
Le Set data parcours le ArrayObject et créer les propriétés à la volée grâce à __set.
En gros ça donne quelque chose comme ça pour la création de la page :
Méthode de l'IndexController :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
public function RunDefaultAction(){
		global $Registre;
		// les modules qu'on veut affichés
		$this->FrontView->AddView("Header")->AddView("LastChange")->AddView("Path")->AddView("ListOfCategory")->AddView("Path")->AddView("Statistics")->AddView("Footer");
		$this->FrontModel->SetModelList(array_keys($this->FrontView->view_needed));
		// On va demandé au modele de récupérer les données nécessaires à la vue
		$this->FrontView->view_needed["ListOfCategory"]->SetData($this->FrontModel->model_needed["ListOfCategory"]->GetData());
		$this->FrontView->view_needed["Path"]->SetData($this->FrontModel->model_needed["Path"]->GetData());
		$this->FrontView->view_needed["Header"]->SetData($this->FrontModel->model_needed["Header"]->GetData());
 
		$this->FrontView->view_needed["Footer"]->SetData($this->FrontModel->model_needed["Footer"]->GetData());
	}
Ensuite dans l'index.php il n'y a que :
Code :
1
2
3
4
$controller = new IndexController();
// On analyse les données
$controller->ParseQuery();
$controller->FrontView->Render();
Pour chaque action différente sur ma page index comme par exemple Marquer les topics comme lu, je vais avoir une méthode dans mon controller comme celle ci dessous.

Est ce une bonne manière de procéder ?

Merci déjà de m'avoir lu jusqu'au bout et merci d'avance pour vos futurs commentaires.

Jo.
Jorael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 15h28   #2
Modérateur
 
Avatar de Er3van
 
Homme Clément
Architecte Logiciel
Inscription : avril 2008
Messages : 1 370
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte Logiciel
Secteur : Industrie

Informations forums :
Inscription : avril 2008
Messages : 1 370
Points : 2 093
Points : 2 093
Je commence aussi à faire du MVC avec du PHP ( c'est bcp plus simple en Java :X ).

J'ai trouvé qq liens pour pourront surement t'aider :

http://julien-pauli.developpez.com/t...vc-controleur/
ftp://ftp-developpez.com/tahe/fichie...mvc-250305.pdf



Ce sont deux PDF qui explique bien, avec un gros exemple dans le second, mais le premier explique mieux ( à mon gout ) et surtout à partir des bases du MVC.
Er3van est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 15h46   #3
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 42
Points : 16
Points : 16
Citation:
Envoyé par Er3van Voir le message
Je commence aussi à faire du MVC avec du PHP ( c'est bcp plus simple en Java :X ).

J'ai trouvé qq liens pour pourront surement t'aider :

http://julien-pauli.developpez.com/t...vc-controleur/
ftp://ftp-developpez.com/tahe/fichie...mvc-250305.pdf



Ce sont deux PDF qui explique bien, avec un gros exemple dans le second, mais le premier explique mieux ( à mon gout ) et surtout à partir des bases du MVC.
Merci mais je les ai déjà lu tous les deux plusieurs fois même car je n'étais pas sur d'avoir tout compris ^^.

C'est également pour ça que je demande des avis sur ma manière de procéder pour être sur que je ne fais pas d'erreur. Je me suis bien pris la tête la semaine dernière pour savoir si je ne me compliquais pas trop la tache en procéder comme ça. Jusqu'à maintenant je n'ai travaillé que sur des petits sites et les seules séparation de code que j'utilisais c'était des classes pour les données et les calculs sur ces dernières, le controle des actions en début de script et l'affichage en fin de script.
Jorael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 16h06   #4
Modérateur
 
Avatar de Er3van
 
Homme Clément
Architecte Logiciel
Inscription : avril 2008
Messages : 1 370
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte Logiciel
Secteur : Industrie

Informations forums :
Inscription : avril 2008
Messages : 1 370
Points : 2 093
Points : 2 093
Avant tout, j'ai du mal à suivre ton raisonnement, donc y a des chances pour que ce qui va suivre te soit inutile

Pour répondre à qq questions, tu peux avoir un controller par page ce n'est pas un problème, par contre, j'ai un peu de mal à comprendre ton architecture, t'as des vues dans ton Modèle ? ou c'est juste leur nom ? et t'as englobé le tout dans le controlleur ? A vrai dire ton arbre est bizarre ^^

A te lire j'ai l'impression que t'as fais une découpe par bloc, et du coup pas vraiment un MVC.

L'approche comme je la conçoit, mais j'suis pas spécialiste, c'est plutôt de faire d'un côté toutes les méthodes et fonctions => modèle, d'un autre d'attribuer toutes les actions à des méthodes => controleur, et enfin une partie qui récolte toutes les actions et met en place les résultats des fonctions appelées => vue.

Du coup, j'aurais plutôt séparé comme ça plutôt que par classes. Avec d'un côté tes vues qui elles seules contiennent l'HTML, d'un autre tes fonctions et tes classes, et enfin la partie contrôleur qui gère l'évenementiel, dont effectivement la gestion des pages lues par exemple.

Cependant, si tu ne bosses que sur des petits projets, et seul, oublie le MVC c'est pas prévu pour ça ! Tu te complique la vie, tu rajoutes du code, et perd un peu en efficacité.
Le MVC n'a d'intérêt qu'à partir du moment ou la factorisation de code vaut la peine, et si t'es à plusieurs développeurs dessus. L'intérêt étant de pouvoir faire des modifs sur une couche qui ne gêne pas une autre couche où un second développeur fait des modifs, tout en ayant une très bonne portabilité.
Er3van est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 19h10   #5
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 42
Points : 16
Points : 16
En fait j'ai inverser Footer et FooterView dans mon schema (oui je sais c'est balot ^^)

En fait mon controller gère tout il crée la facade (modèle) et la vue générale (FrontView)
La facade gère les différentes classes métiers requises par la page en cours
La FrontView gère les différentes modules à afficher. Cela me permet de facilement rajouter un bloc d'affichage sur une page (par exemple les statistiques du forum, la liste des connectés). En fait le FrontView construit la page HTML elle récupère des autres blocs des autres classes xView.

Jo.

ps: Je peux pas oublier MVC si je veux devenir Developpeur web dans un grosse boite ^^
Jorael est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h56.


 
 
 
 
Partenaires

Hébergement Web