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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    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
    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
    Membre habitué
    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
    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
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    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 149
    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 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    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() ...
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    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
    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
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    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 149
    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.

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