Petite question à propos PHP POO, MVC ?

Bonjour,

je suis entrain de concevoire une application web dynamique stockant trop d'informations,
c'est pour cela j'ai choisi l'architecture MVC avec php5(poo).
alors : j'ai deux classes controleur(traitement des données avec php) , modéle (connection avec la base de donnée , requetes sql.....) et une page index. php(c'est la vue.., affichage des résultats ..)

la question qui se pose ici : quelle est le type de relation entre la classe controleur et modéle ??(simple relation, héritage....) ???

voila mon probléme, j'espére que c'est claire
merci d'avance^^



To Be Or Not To Be , Marwen

6 réponses

  1. Salut,

    « et une page index. php(c'est la vue.., affichage des résultats ..) »
    Je pense que index.php devrait plutôt être le contrôleur car ceux-ci sont appelés par le navigateur, pas les vues.

    « quelle est le type de relation entre la classe controleur et modéle ??(simple relation, héritage....) ? »
    Le contrôleur doit inclure le modèle.
    À partir de là, tu peux utiliser la classe ou les fonctions écrites dans le modèle.
    Le contrôleur doit également inclure les vues.
    1. salut merci pour la réponse :),

      aprés ce tutoriel j'ai trouvé que ta réponse est la bonne....
      http://www.siteduzero.com/tutoriel-3-31452-adopter-un-style-de-programmation-clair-avec-le-modele-mvc.html
      j'ai tort ! , index.php est le controleur...,je comprend bien..
      en effet, il me reste une deuxiéme question :
      pour mon application je doit travailler avec l' orienté objet , malheureusement dans ce tuto c'est du php classique....
      bref : je vous donne un exemple de mvc avec POO , ensuite tu me donne ton avis à propos.

      c'est la page controleur.php:

      //appel au modéle

      include_once("modéle.php");     
      
      
      class membre{     
      private $login;     
      private $password;     
      private $pays;     
      
      public __construct($log)     
      {


      /*
      NB get_membre_information($x) c'est une fonction dans "modéle.php"
      elle retourne un tableaux des informations de membre
      */

      $tab=get_membre_information($log);     
      $this->login=$tab['login'];     
      $this->password=$tab['password'];     
      $this->pays=$tab['pays'];     
      }     
      
      public function connect($log,$pass)     
      {     
      $est_connecte=existe_membre($log,$pass);     
      if($est_connecte)     
      { echo "ok";     
          $_SESSION["login"]=$log;     
           }     
           else     
              echo "no";     
      
      }     
      
      
      public function inscri($log,$pass,$pays)     
      {     
      $res=ajouter_membre($log,$pass,$pays);     
      if($res)     
      echo "ok";     
      else     
      echo "no";     
      }     
      
      }     
      
      
      include_once("vue.php");


      ----------------------------------------------------------------------
      modéle.php(un ensemble des fonctions) :

      //connection..

      $connexion = new PDO("mysql:host=root;dbname=ma_base");     
      
      function ajouter_membre($log,$pass,$pays)     
      {....}     
      function existe_membre($log,$pass)     
      {....}     
      function get_membre_information($log)     
      {....}

      ----------------------------------------------------------------------
      vue.php(instanciation de la classe membre....)
      par exemple :

      $m=new membre("chabacha109");     
      $m->connect("chabacha109","xxxx");     
      .....

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

      je crois que c'est parfait ? non ?

      bon, dans cet exemple la page "modéle.php" est un ensemble des fonctions,
      heureusement ici les appelles vers les fonctions est assez simple,
      mais dans le cas où la page "modéle.php" soit une classe, comment faire dans ce cas ,
      plutôt comment interroger les methodes de cette classe a partir la classe membre ??

      j'ai une idée mais je ne suis pas sure ...
      faire une instance de la classe modéle.php, ensuite appeller une methode..
      le probléme ici c'est (a chaque appel a une methode de la classe membre il faut faire une instance de la classe modéle.php..) c'est trop couteux en mémoire....je crois
      voila donc.


      merci pour votre attention ^_^


      To Be Or Not To Be , Marwen
      1. Salut,

        Tu n'as pas encore tout à fait compris.

        Pour commencer, la vue ne contient pas de code de code PHP.
        Enfin, si, pour afficher les variables, faire des boucles, des conditions (afficher un message s'il n'y a aucun article par exemple).
        Ici, ta vue fait appel au contrôleur, ce n'est pas normal.

        Un modèle représente une ressource. Ainsi, tu as un modèle pour les membres, un autre pour les articles, un autre pour les catégories, etc.
        Le modèle est souvent un classe contenant des méthodes pour ajouter, modifier, supprimer ou récupérer les données d'un élément (une news, un membre, etc).

        Quant au controleur, dans ton cas, utiliser une classe ne sert à rien.
        Ça peut être utile dans la cas où tu as une classe de base « Controller » de base contenant des méthodes pour (par exemple) traiter la requête HTTP, la mise en cache, les cookies, etc : c'est plus souvent utilisé dans les frameworks.
        1. salut,
          ;( , je ne comprend pas mais j'ai lu attentivement le tuto ,je crois que le problème c'est le passage vers le POO, déja le tuto contient du php classique....
          j'ai décidé de démarrer avec les framework comme zend, pour mieux comprendre
          grand merci ^^
      2. Bonjour,

        Pourquoi n'essayerez-vous pas un Framework PHP comme Zend ou Symphony ?
        Ils intègrent toutes ces notions MVC déjà implémentées et il existe de nombreux tutoriaux pour débuter.
        Si vous maîtrisez bien PHP cela vaut la peine.
        Zébulon
        1. salut,
          oui effectivement, je vais commencer un tuto zend ;)
          merci a vous aussi ^^
        2. Je ne connais pas ces frameworks mais j'ose te conseiller aussi, CakePHP.
      3. Bonjour,

        j'ai un probléme avec le réécriture des url sous zend...

        la class bootstrap.php :    
        class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {    
        
        }    
        
        
        mon fichier .htaccess situé dans Public/ :    
        
        RewriteEngine On    
        RewriteCond %{REQUEST_FILENAME} -s [OR]    
        RewriteCond %{REQUEST_FILENAME} -l [OR]    
        RewriteCond %{REQUEST_FILENAME} -d    
        RewriteRule ^.*$ - [NC,L]    
        RewriteRule ^.*$ index.php [NC,L]    
        


        lorsque je tape http://localhost:8888/zendtest/Public/ ,bah ici ça marche
        il appel le controleur IndexController.php et la vue views/scripts/index/index.phtml.....

        en fait IndexController.php c'est le controlleur par defaut méme pour index/index.phtml.

        ensuite j'ai créé mon propre conrolleur et vue pour tester le mod rewrite:

        application/controllers/AfficheController.php

        class AfficheController extends Zend_Controller_Action    
        {    
        
        public function init()    
        {    
        
        }    
        
        public function indexAction()    
        {    
        
        }    
        
        }   


        application/views/scripts/affiche/index.phtml

        <center>    
        
        hello !    
        c'est la vue de AfficheController.php !!!    
        
        </center>    
        


        lorsque je tape http://localhost:8888/zendtest/Public/affiche/index
        il affiche :
        An error occurred
        Page not found.


        il me redirige vers la page error/error.phtml, autrement dit
        la ressource "affiche" de(AfficheController.php) et le service "index" de( function indexAction(){})
        n'existent pas !!

        d'ou vient le probléme, j'ai bien tout préparer ! , en plus il marche avec le controlleur et la vue par defaut

        AIDEZ MOI SVP , merci beaucoup beacoup ^_^

        To Be Or Not To Be , Marwen
        1. pas des réponses ! :(((

          voila mon projet uploder sur 4shared pour mieux comprendre...
          http:// www . 4shared . com / file / Hu28VRMX / zendtestSite_De_Zero.html?

          merci d'avance
          1. Je n'ai jamais utilisé Zend Framework, je ne saurais pas t'aider plus, désolé.
            Bonne continuation.

            « mon fichier .htaccess situé dans Public/ : »
            Normalement tu devrais tomber directement dans ce dossier en tapant http://localhost:8888/ , sans avoir la possibilité de remonter dans les autres dossiers.
          2. salut,
            @avion-f16 , pas de problème monsieur ^^ , j'attend les amis....

            le dossier Public sous zend contient par convention :
            un fichier index.php et un .htaccess
            c'est le déclencheur de toute l'application :), ensuite si vous voulez supprimer /public
            il suffit de créer une hôte virtuel....