IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP et modèle MVC


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 5
    Points
    5
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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

  3. #3
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    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() ...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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.

  7. #7
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    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.

  8. #8
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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 ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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 ?!?

  10. #10
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    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 .

  11. #11
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Voici l'exemple d'une vue que je pense utilisé si elle est correcte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  14. #14
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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).

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/10/2009, 18h46
  2. Le modèle MVC et le contrôleur sous PHP
    Par Invité dans le forum Langage
    Réponses: 0
    Dernier message: 15/10/2009, 13h56
  3. Réponses: 0
    Dernier message: 11/02/2008, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo