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 :

principe de fonctionnement du MVC


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut principe de fonctionnement du MVC
    Bonjour,

    je dispose d'un code basé sur le MVC (issu d'une personne très calée), mais j'ai des problèmes basiques de compréhension : j'ai 3 classes "model", "view" et "controller", un index.php qui crée un objet "controller" et dans le constructeur de celui-ci la création de 2 objets "view" et "model".

    Pour plus de clarté, voici le code de la classe "controller" :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
    session_start();
    class controller{
    private $model; // 2 attributs pour pointer sur les 2 autres classes.
    private $view;
     
    public function __construct() {
     
    /* création du modèle et de la vue ; la vue doit connaître aussi le modèle */
    $this->model=new model();
    $this->view=new view($this->model);
     
    /* l'action est positionnée soit par GET (see_doc), soit par POST (formulaires) */
    $action="";
    if (isset($_GET['action'])) $action=$_GET['action'];
    if (isset($_POST['action'])) $action=$_POST['action'];
    if (!isset($_SESSION['Account'])) $action="connect"; // Si pas connecté, l'action est forcée à "connect"
    $res_updateM=$this->updateModel($action);
    $this->showView($action,$res_updateM);
     
    }
     
    public function updateModel($action) {
    switch($action) {
    	case "insert":$res=$this->model->insertOperation(new Operation($_POST['DateISO'],$_POST['intitule'],$_POST['montant'],NULL,$_POST['id']));break;
    	case "remove" : $res=$this->model->removeOperation(array_keys($_POST['suppr'])) ; break;
    	case "update": $res=$this->model->updateOperation(new Operation($_POST['DateISO'],$_POST['intitule'],$_POST['montant'],NULL,$_POST['id']));break;
    	case "connect" : $res=(isset($_POST['login']))&&($this->model->actionFormConnect($_POST['login'],$_POST['pwd'])); break;
    	default : $res=true; break;
    }
    return($res); // true si OK, false sinon
    }
     
    public function showView($action, $res_updateM) {
    switch($action) {
      case "see_doc" : $vue="doc"; break;
      case "insert" : 
      case "update" :
      case "remove" : if ($res_updateM) $vue="list"; else $vue="err"; break;
      case "connect" : if ($res_updateM) $vue="list"; else $vue="authentif"; break;
      default :$vue="list"; break;
    }
    $this->view->show($vue); // affichage des différentes vues (formulaires ou msg d'erreur)
     
    }
    }
    Les 3 classes disposent chacune de plusieurs méthodes. Celles de "view" et "model" sont appelées par les 2 de la classe "controller", ces deux-là étant lancées par le constructeur du "controller", qui est appelé par index.php : $c=new controller();.
    Visiblement les méthodes de "view" et de "model" sont tout le temps disponibles pour l'utilisateur et ce que je ne comprends pas, c'est que ces méthodes ne sont appelées qu'une seule fois, à la création du controller : peut-on m'expliquer ?

  2. #2
    Membre éprouvé
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Billets dans le blog
    1
    Par défaut
    suit la trace du code.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Par défaut
    Dans ce code, tout se passe à la création du contrôleur.
    NB : en PHP (sauf session, serialisation, etc.), toute la structure des objets est recréé à chaque fois, donc la création du contrôleur a lieue à chaque fois, à chaque clic du visiteur.

  4. #4
    Membre éprouvé
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Billets dans le blog
    1
    Par défaut
    dans updateModel(), des méthodes sont bien invoquées.
    Regarde aussi les constructeur de view et model, il peut y avoir du code.

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    En fait, quand lundi soir, j'ai vu les réponses, je n'avais pas du tout imaginé que askiwhale était tout simplement l'auteur du code (je ne l'ai compris que mardi après-midi...) !

    Pour vérifier que c'était vrai, j'ai rajouté ce code dans le constructeur du controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!isset($_SESSION['appel_ctrl'])) $_SESSION['appel_ctrl']=1; else $_SESSION['appel_ctrl']++;
    et celui-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<br/><br/>nb appel ctrl:".$_SESSION['appel_ctrl']
    dans la vue principale...et c'est vrai !

    Mais que faut-il comprendre par :
    toute la structure des objets est recréé à chaque fois
    car $c=new controller(); n'est appelé qu'une seule fois, me semble-t-il...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Par défaut
    $c=new controller(); est appelé dans index.php.
    Ce dernier est appelé à chaque fois (à chaque action de l'utilisateur, à chaque requête HTTP).
    Donc le contrôleur (et tous ses objets agrégés) est recréé à chaque fois.
    C'est nécessaire, en PHP, sauf à mettre en SESSION (ce qui n'a pas d'intéret ici), ou autre stockage de données, tout est perdu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. principe de fonctionnement : votre avis svp
    Par FraK dans le forum Langage
    Réponses: 2
    Dernier message: 29/06/2007, 13h19
  2. Principe de fonctionnement JSP/Mysql
    Par fabou3377 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 28/03/2007, 13h29
  3. onSubmit principe de fonctionnement
    Par Tempotpo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/07/2006, 16h08
  4. [VB6] principe de fonctionnement des concepteurs ?
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 02/06/2006, 18h37
  5. [HARDWARE] Principe de fonctionnement d'un touchpad
    Par Cyspak dans le forum Ordinateurs
    Réponses: 4
    Dernier message: 26/12/2003, 02h47

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