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 :

Utiliser le MVC sans framework


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut Utiliser le MVC sans framework
    Bonjour,
    je viens vous voir car je démarre la réalisation d'un site php , et cette fois-ci j'ai envie de passer à du PHP objet.

    J'ai décidé d'utiliser l'organisation MVC pour bien séparer mes couches, par contre je ne souhaites pas utiliser de framework déjà tout fait.

    Je viens donc ici pour vous exposer la manière avec laquelle je compte procéder, afin d'avoir vos remarques et vos corrections/optimisations si nécessaire.

    Donc prenons l'exemple de mon site il y aura une table MEMBRE, une table petite annonces par exemple.
    Voici l'arborescence que je comptais utiliser:
    • index.php
    • /models/GenericDBStorer.php
    • /models/MembreDBStorer.php
    • /models/AnnonceDBStorer.php
    • /views/GenericView.php
    • /views/MembreView.php
    • /views/AnnonceView.php
    • /controllers/GenericTask.php
    • /controllers/MembreTask.php
    • /controllers/AnnonceTask.php



    Donc voila sur ce petit exemple. Pour ce qui est de la partie des models pas de PB, j'ai ma classe principale GenericDBStorer.php qui implémente les principales fonctions ( readAll() , save () , read(id) , load() ) et tous mes autres models héritent de celle là.

    par contre là ou ça se corse, c'est au niveau des vues je n'arrive pas à trouver un intérêt à les utiliser dans le MVC car je n'arrive pas à trouver forcément un gain de temps, car chaque vue sera différente?( donc rien à factoriser ? )

    Habituellement dans mes sites je fais qque chose dans ce genre (index.php ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div id="contenu">
    <?php 
    if exists($page.".php")
    {
        include($page.".php");
    }
    ?>
    </div>
    Dans l'url je passe par exemple : index.php?page=membre
    et donc j'inclus membre.php et c'est membre.php qui affiche la liste des membres.
    Ou bien je passe index.php?p=membreDetail&amp;id=3
    j'affiche ainsi les infos du membre 3. (inclusion de membreDetail.php)
    Ou alors index.php?p=editerMembre
    Là l'utilisateur (loggé sur sa SESSION) arrive sur la page editerMembre.php avec $_SESSION["id_mb"] comme paramètre pour récupérer ces valeurs...

    Donc est ce que c'est à ce niveau là que mon controller va devoir agir ?
    Si je fais passer index.php?p=membre&amp;action=voir
    est ce que je devrais faire qque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="contenu">
    <?php 
    //Charge le controller demandé
    GenericTask::loadController($page."Task");
    MembreTask->voir($page);
    ?>
    </div>
    et donc dans MembreTask.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class MembreTask.php extends GenericTask
    {
    public $page;
     
    GenericDBStorer::load($this->page);
    MembreDBStorer->readAll();
    MembreView->voir() ?????
    }
    En fait je ne comprend pas trop l'interaction avec la vue, je ne sais pas trop quelles fonctions y mettre à l'intérieur , et qu'elle intérêt de faire hériter toutes mes vues d'une vue générique si je ne peux rien factoriser.. ?

    Voila j'attends vos conseils et avis
    Et merci à tous ceux qui vont prendre le temps de lire mon message .
    bye

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par rockt13 Voir le message
    par contre là ou ça se corse, c'est au niveau des vues je n'arrive pas à trouver un intérêt à les utiliser dans le MVC car je n'arrive pas à trouver forcément un gain de temps, car chaque vue sera différente?( donc rien à factoriser ? )
    En fait dans les frameworks, pour gérer le code redondant des vues, beaucoup proposent un layout, un code qui est inclu automatiquement (ou non) dans chacune de tes vues afin de gérer par exemple les headers, footers etc...

    Par contre, n'assimile pas les frameworks et plus généralement les MVC à un gain de temps (au sens exécution du programme). C'est généralement bien plus long comme temps d'exécution qu'un code "fouillis".

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Salut Madfrix,
    En fait moi je pensais plutôt à gain de temps au sens développement.

    par contre du coup tu me dis que le temps d'exécution ( donc de chargement de mes pages ) sera plus long ?

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Tout depend la complexité de ton code MVC mais pour zend par exemple, tu as une multitude de pages php incluses, de plugins lancés, d'allers retours etc...qui font que naturellement le temps d'exécution sera plus long. En contre partie, le temps de programmation, maintenance sera beaucoup plus rapide.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Ok merci pour cette précision

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Que pensez vous d'un index.php qui ressemble à ceci:
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <?php
     
    require "core.php";
     
    ?>
     
    <title>blabla</title>
    <link rel="stylesheet" href="ressources/css/style.css" type="text/css" />
     
    </head>
    <body >
        <div id="page">
            <div id="header">
                <div id="inlogin">
                    <div class="inlogin">
                    <?php include("inlogin.php"); ?>
                    </div>
                </div>
            </div>
            <div id="centre">
                <div id="menu_gauche">
                </div>
                <div id="contenu">
                    <?php
                    genericController::route($_GET[]);
                    ?>
                </div>
            </div>
     
        </div>
     
            <div id="footer">
            </div>
     
    </body>
    </html>
    et d'un controller qui ressemble à cela:
    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
    47
    48
    49
    50
     
    <?php
    class genericController{
     
        public static function route($v = array())    
        {
            if(isset($v["action"]))
            {
                $action= $v["action"];
                $storer = genericDBStorer::load($v["page"]);
                switch($action)
                {
     
                    case "voir": if(isset($v["id"]))
                                    {
                                        if($storer!=0)$storer->readOne("*",$v['id']);
                                        $view=genericView::load($v["page"]);
                                        $view->voir($storer);                                                                        
                                    }
     
                                    break;
                    case "editer":if(isset($v["id"]))
                                    {
                                        if($storer!=0)$storer->readOne("*",$v['id']);
                                        $view=genericView::load($v["page"]);
                                        $view->editer($storer);                                                                        
                                    }
                                    break;
                    case "lister":
                                        if($storer!=0)$storer->readAll();
                                        $view=genericView::load($v["page"]);
                                        $view->lister($storer);                                                                        
     
                                    break;
                }
     
     
            }
            elseif(isset($v["page"]) && !isset($v["action"]))
            {
                    $page=$v["page"];
                    if(file_exists($page.".php"))
                    {
                        include("$page.php");
                    }
            }
     
        }
    }
    ?>
    Est ce que en faisant ceci c'est vraiment du MVC? est ce que cest optimisable ?

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par rockt13 Voir le message
    Salut Madfrix,
    En fait moi je pensais plutôt à gain de temps au sens développement.

    par contre du coup tu me dis que le temps d'exécution ( donc de chargement de mes pages ) sera plus long ?
    Bien sûr que le temps de traitement sera plus long, comme bien expliqué par Madfrix.
    De plus, la rapidité de développement est-elle vraiment le plus important dans un framework comme zend ?
    AMHA non.
    Le plus grand avantage que je vois à cette architecture est sa souplesse, pour y ajouter des plugins par exemple. Si ton appli n'a pas vocation à être distribuée et "modée", franchement, le MVC perd pas mal de ses avantages et ne perd aucun de ses inconvénients.

    Demandes à Rasmus ce qu'il pense du MVC...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    comme je l'ai dit au départ, je ne souhaite pas utiliser de ZendFramework ou autre .

    Vous me conseillez donc de rester sur un code procédural plutôt fouillu ?

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par rockt13 Voir le message
    comme je l'ai dit au départ, je ne souhaite pas utiliser de ZendFramework ou autre .

    Vous me conseillez donc de rester sur un code procédural plutôt fouillu ?
    Pourquoi réinventer la roue ?

    De plus, un code procédural n'est pas forcément horrible, en utilisant les bons éléments de POO en cerise sur le gâteau.

    Prenons un exemple simple : ce forum. A ma connaissance, phpBB n'est pas MVC et ça ne l'empêche pas d'être un leader sur son secteur.

  10. #10
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Pourquoi ne pas utiliser les frameworks existants ?

    En l'occurrence, je te conseillerais bien Code Igniter

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Parce que je pensais que ca serait plus compliqué de mettre en place tout un framework, comprendre comment il marche, bien le prendre en main ,sans vraiment savoir tout ce qui se cache derrière ...

    En fait je vais ptet rester sur un code comme je faisais avant, et simplement utiliser un modeles pour la BDD , car pour le coup les fonctions générique save,load,read m'éviteront de dupliquer pas mal de code

    je vais regarder aussi le framework que tu me conseilles
    CodeIgniter et CakePhp tu en penses quoi ?

  12. #12
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par rockt13 Voir le message
    je vais regarder aussi le framework que tu me conseilles
    CodeIgniter et CakePhp tu en penses quoi ?
    Je classerais ça dans l'ordre de grandeur des projets auxquels ils s'adressent :

    - léger => Code Igniter
    - moyen => Cake
    - lourd => ZF et Symfony

    De plus, le code de CI est très bien documenté. C'est un très bon point d'accès au monde MVC.
    Même Rasmus qui pète un peu un câble en ce moment vis à vis des frameworks MVC ne voit pas CI d'un trop mauvais oeil.

  13. #13
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Je m'incruste un peu au topic malgrè que le MVC de mon coté c'est franchement pas gagné (me prends la tête la dessus quoi).

    On fait pas mal l'éloge de Code Igniter, et j'en doute pas que ce soit un excellent FrameWork.
    Mais après l'avoir parcouru un peu, j'ai été surpris de voir que c'est codé en Php4.
    Rien que ça m'a suffit de le mettre de coté, car j'estime qu'on perdra en apprentissage de Php, car tout ce qui est propre à Php5 n'y est pas, c'est un manque.

    Sauf erreur, il me semble que Kohana est basée/inspirée de Code Igniter, mais en total Php5, de même qu'un système de module a été implanté ce qui offre plus de possibilité.
    Apparemment il serait léger aussi.
    En tout cas, j'ai parcouru son code, je le trouve vachement bien.


    C'était une petite remarque en passant.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Je suis au stade ou je ne sais plus quoi faire.
    Repartir en utilisant un framework ( CakePHP car beaucoup de bon tutos vidéo sont disponible sur internet), ou continuer à développer en procédurale avec x pages ex : edit_membre.php, voir_membre.php, list_membre.php , etc..

    Après la question que je me pose une fois que tout mon site sera fait, rajouter un petit peu d'ajax avec jQUERY est ce que ce sera très compliqué ? vis-a-vis du framework utilisé ...

  15. #15
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par rockt13
    Après la question que je me pose une fois que tout mon site sera fait, rajouter un petit peu d'ajax avec jQUERY est ce que ce sera très compliqué ? vis-a-vis du framework utilisé ...
    Normalement, non, ça ne devrait pas être trop compliqué. Mais après, ce que je te conseille, c'est de commencé sans ajouter de l'ajax un peu partout et de ne le faire qu'à la fin.

    Pour code igniter, je suis d'accord avec snafu, je pense aussi que c'est une très bonne solution pour avoir quelque chose de léger et qui fonctionne bien. Après le fait que ça soit aussi porté php4 ne me choque pas trop (même si c'est un peu démodé). De plus, ils ont une doc en français qui est vraiment super.

    Pour Zend, je crois que pour faire une petite appli sans se prendre la tête, il vaut mieux passer son chemin. Je trouve que c'est un peu un peu char d'assaut, donc, si c'est pour écraser une mouche, passe ton chemin...

    Dans les produits français, on peut trouver Hoa qui est pas mal (mais qui s'approche aussi du char d'assaut) et jelix. Pour avoir testé Hoa, je pense que c'est pas mal pour une solution vraiment complète.

    Sinon, en ce qui concerne le "quoi faire". Je crois que c'est une question qui n'appartient qu'à toi. On peut faire de très beau site avec derrière du code procédurale relativement propre. L'avantage que je trouve au système MVC, c'est que c'est plus facilement extensible et maintenable.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    En fait ce que j'ai peur en utilisant un truc clef en main, c'est de galérer par la suite si je veux faire des choses un peu particulières , j'ai peur de ne pas savoir comment les intégrer dans le framework MVC

  17. #17
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par rockt13 Voir le message
    En fait ce que j'ai peur en utilisant un truc clef en main, c'est de galérer par la suite si je veux faire des choses un peu particulières , j'ai peur de ne pas savoir comment les intégrer dans le framework MVC
    Cela ne devrait pas être un frein. Après avoir compris l'essentiel sur le fw que tu auras décider de choisir, tu verras que tu peux faire à peu près tout ce que tu veux et que ça s'intégrera très bien au reste. C'est d'ailleurs un peu l'avantage de ce type de solution.


    Cordialement,
    Patouche

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Bon je vais peut-être faire le grand pas , en utilisant CakePhp , car j'ai vu pas mal de tuto vidéos, et donc du coup je me sens moins seul lol

    merci à tous pour vos remarques et vos avis

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 343
    Points : 124
    Points
    124
    Par défaut
    Pour infos sur developpez.com il y a un tutoriel pour faire un site MVC en php:
    http://julien-pauli.developpez.com/t...vc-controleur/

    Personnellement, je trouve ce tutoriel pas clair du tout, donc bon. C'était juste pour info, tu peux toujours t'en inspirer.

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 45
    Points
    45
    Par défaut
    Salut ,
    oui j'ai déjà parcouru ce tuto , mais je l'ai trouvé un peu "imbuvable" ptet qu'à tête reposée , il passerait mieux..

    merci pour l'info

Discussions similaires

  1. Modele d'architecture MVC sans framework
    Par sputnick dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 26/05/2011, 11h56
  2. [PHP 5.0] [Optimisation] - MVC, avec ou sans POO ? Avec ou sans Framework ?
    Par Astriel dans le forum Langage
    Réponses: 10
    Dernier message: 07/02/2011, 14h32
  3. Architecture MVC sans framework
    Par JLC83 dans le forum Langage
    Réponses: 5
    Dernier message: 19/08/2010, 10h29
  4. Mise en place MVC sans framework dédié
    Par Pwill dans le forum Flex
    Réponses: 4
    Dernier message: 01/06/2010, 09h27
  5. Réponses: 5
    Dernier message: 09/08/2008, 19h59

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