Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 19/05/2011, 22h35   #1
Invité de passage
 
Inscription : février 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 12
Points : 1
Points : 1
Par défaut PHP et modèle MVC

Bonsoir a tous,

Je suis en train de développer une application PHP selon le modèle MVC. Je me pose la question si l'architecture de mon application est bien correcte. Voici un exemple de mes différents fichiers :


Voici le code pour le le model de donnée (acces à la BD) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
class UserModel{    
    public function saveUser($user)
    {
        $pdo = new PDO("mysql:host=localhost;dbname=******",'*****','******');
 
        $name = $user->getName();
        $lastname = $user->getLastname();
 
        $query = "INSERT INTO users (USE_name,USE_lastname) VALUES ('".$name."','".$lastname."')";
 
        $user = $pdo->exec($query);
    }
}
Le code pour le modèle de classe (objet métier) :

Code :
1
2
3
4
5
6
7
8
9
 
class User {
 
    private $name;
    private $lastname;
 
    ###Fonction getter et setter###
 
}
le code pour le controleur :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
class UserController{
    public function saveUser()
    {
        $user = new User();
 
        $user->setName($_POST['name']);
        $user->setLastname($_POST['lastname']);
 
        $user_model = new UserModel();
        $user_model->saveUser($user);
    }
}
En ce qui concerne la vue associée, c'est tout simplement un formulaire HTML, me retournant par POST les données "prenom" et "nom".

Est ce que le fait de créer des objets métier (User) dans le contrôleur est il une méthode correcte au niveau MVC ? Ou est ce que ceci doit uniquement être fait au sein de la partie modèle ?

De plus avec une méthode comme celle-ci, j'utilise mes objets au sein de la vue, par exemple dans une vue pour afficher un utilisateur, j'ecrirais : $user->getName(). Faut-il pas utilisé des variables simple ou des tableaux ?

C'est la première fois que je développe une application en orienté Objet en suivi le modèle MVC, je codais encore de manière procédural il y a encore peu de temps. J avoue je suis un peu perdu, et j espère que vos explications m'éclaireront sur le sujet.

Merci pour votre aide
zinka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 07h46   #2
Invité de passage
 
Inscription : février 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 12
Points : 1
Points : 1
Voici le diagramme de classe de l'application, uniquement la partie "modèle" de ma structure MVC. J'hésite entre différentes solutions, et je sais pas vraiment laquelle serait la plus adaptée.



* Une classe pour la représentation de l'objet dans la base (User.php) et une classe pour la liaison avec la base de données (UserModel.php). Solution présentée dans la pièce jointe.

* Une seule classe pour la représentation de l'objet avec comme méthodes, les différentes requêtes SQL pour la liaison avec la base de données.

* Une seule classe permettant la liaison avec la base de données et aucune représentation de l'objet. C'est a dire que cette solution me retournerai simplement un tableau de données qui sera utilisé par mes contrôleurs et mes vues.

Dans les deux premières solutions, se sont des objets qui seront utilisé pour représenter les données au sein des contrôleurs et des vues, et non des tableau de données.

Merci pour votre aide
zinka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 08h17   #3
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Pour ma part tant que dans la vue tu ne bosse pas sur un modèle ou bien sur un objet travaillant un modèle je pense que tu restes dans l'optique du MVC.

Manipuler un objet ou un tableau c'est pareil. Dans certains langages un objet peut être manipulé comme un tableau.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 08h39   #4
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Pourquoi faire un model User et un modèle Bdd User ?
Le but du modèle est justement de gérer les données.

Tu peux avoir éventuellement une collection d'User, mais de mon point de vue un objet user doit avoir des méthodes du genre edit(),save(),find() ...
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 09h03   #5
Invité de passage
 
Inscription : février 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 12
Points : 1
Points : 1
Le problème que j'ai, c est que dans mes vues, j'utilise des objets pour afficher les données, du coup, la vue communique directement avec le modèle.

Par exemple, dans ma vue "info_user.php", il y aura qqch comme :

Code :
1
2
 
echo "<p>".$user->getName()."</p>";
Alors comment puis-je procéder pour de pas utiliser mes objets dans les vues, faut-il que mon modèle me retourne des tableaux de données ?

------------------------------------------------------------------

En ce qui concerne l'idée d'avoir un classe modèle par entité, rejoint donc ma première idée, et si j ai bien compris, ceci reviendrai a obtenir une classe du genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
class User {
    private $name;
    private $lastname;
 
    ### GETTER ET SETTER
 
    public function save(){
 
        ### requete dans BD
 
    }
 
    public function getUser(){
 
        ### requete dans BD
 
    }
}
Merci à vous pour votre aide, je commence à y voir plus clair
zinka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 09h06   #6
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Tu peux sans souci utiliser des objets dans tes vues, mais il faut que ces objets aient été instanciés dans le contrôleur et qu'ils n'agissent pas comme des modèles, sinon tu casses le MVC.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 11h26   #7
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
Salut, en fait j'ai pas bien lit ton message mais juste voyant php+mvc m'a incité à te conseiller d'utiliser un framework au lieu de faire ton propre mvc tu pourrais chercher à propos de zendframework ou bien symfony ils sont pas vraiment difficiles.
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 11h56   #8
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Citation:
Envoyé par omar24 Voir le message
Salut, en fait j'ai pas bien lit ton message mais juste voyant php+mvc m'a incité à te conseiller d'utiliser un framework au lieu de faire ton propre mvc tu pourrais chercher à propos de zendframework ou bien symfony ils sont pas vraiment difficiles.
Ils sont juste super-méga-giga-(j'en oublie pas ?) lourd.
Je déconseille vivement ce genre de framework pour des petits projets... C'est du temps perdu selon moi pour le développement si on a besoin de se former ainsi que pour la maintenance.

Dans la construction on ne détruit pas un bâtiment à coup de bombe H, donc pourquoi faire différemment dans le dev ?
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 12h10   #9
Invité de passage
 
Inscription : février 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 12
Points : 1
Points : 1
Ok merci pour votre aide, mon projet avance plutôt bien !

AU niveau des frameworks, du fait que c'est un projet de diplôme, l'application doit se faire HomeMade. Mais c'est vrai que les frameworks sont intéressant pour le développement d'application web MVC. Comme "petit" framework pour des projets assez simple, il y a CakePHP et codigniter qui sont vraiment pas mal. Après c est vrai que pour les projets plus importants, Zend ou encore Symfony sont d'excellents outils, mais bien plus compliqué à prendre en main.

J'aurai encore un petite question, en ce qui concerne la structure MVC en POO, est-ce que les vues sont aussi des objets ? Avec du genre des méthodes, setdata() pour récupérer les données et render() pour obtenir le rendu HTML ?

Est-ce que ceci ne dérange pas au niveau MVC, du fait que nous que la vue des plus simplement du HTML-CSS, mais une classe ?!?
zinka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 12h32   #10
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
oui selon la philosophie de zend les vues sont des classes donc en mvc normal comme tu fais toi ça serait mieux que ça soit classe. Tu dis que ça pourra déranger moi je dis non , pourquoi? car on l'utilise comme objet pour permettre à elle d'obtenir les informations nécessaires à partir du contrôleur après tu te places dans le fichier html pour organiser ces informations dans ta page comme tu veux.c'est comme ça que du vrai mvc est appliqué en fait ça t'évitera de faire des traitements dans tes pages html de présentation à part la mise en forme .
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 12h43   #11
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Citation:
Envoyé par zinka Voir le message
J'aurai encore un petite question, en ce qui concerne la structure MVC en POO, est-ce que les vues sont aussi des objets ? Avec du genre des méthodes, setdata() pour récupérer les données et render() pour obtenir le rendu HTML ?

Est-ce que ceci ne dérange pas au niveau MVC, du fait que nous que la vue des plus simplement du HTML-CSS, mais une classe ?!?
En fait la vue est aussi le parser, c'est pour cela que c'est un objet (pas encore rencontré de framework n'ayant pas une vue objet).
Il serait bête de mettre le code pour parser le fichier de rendu dans chaque action du contrôleur.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 13h22   #12
Invité de passage
 
Inscription : février 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 12
Points : 1
Points : 1
Citation:
Envoyé par transgohan Voir le message
En fait la vue est aussi le parser, c'est pour cela que c'est un objet (pas encore rencontré de framework n'ayant pas une vue objet).
Il serait bête de mettre le code pour parser le fichier de rendu dans chaque action du contrôleur.
Je ne comprend pas vraiment ce principe, quand tu dis parser, qu est ce qui se passe concrétement ? Peux tu donner un exemple, ca m'aiderai surement à mieux voir de quoi il s agit.

Car pour le moment, mes vues sont des fichier PHP avec du code HTML et des variables récupérées depuis le controleur, mais je ne parse rien du tout.
zinka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 13h25   #13
Invité de passage
 
Inscription : février 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 12
Points : 1
Points : 1
Voici l'exemple d'une vue que je pense utilisé si elle est correcte :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
class listUserView{
 
    private $data;
 
    public function setData($data)
    {
        $this->data = $data;
    }
    public function render()
    {
        ?>
        <h1>Liste Users</h1>
        <?php
 
        foreach($this->data as $row)
        {
            echo $row->getName();
        }
    }
}
Et les méthodes setData() et render() sont appelé depuis le controleur.
zinka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 13h44   #14
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Les vues sont souvent générées par un moteur de template (PHPLib, Smarty, ect).
De là vient mon utilisation du mot parser.
Il y a aussi les solutions comme tu le présentes qui impliquent directement du code PHP dans la vue pour l'affichage des variables mais je trouve cela assez moche et peu sécurisant (du fait qu'on doit sécuriser dans chaque fichier de Vue au lieu de centraliser dans une class).
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan 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 19h54.


 
 
 
 
Partenaires

Hébergement Web