Partage
  • Partager sur Facebook
  • Partager sur Twitter

Transformer son projet en MVC et Objet

    12 décembre 2019 à 18:15:07

    Bonjour,

    Je reviens vers vous car j'ai eu un problème que voulu changer mon projet en MVC. C'est dans les cahiers des charges, si ça serait à moi j'aurais laissé comme ça, car ça marchait très bien. Je vous présente mon site. J'ai un site de voyage avec les articles de différentes catégories. Ils sont affiché en page d’accueil  et j'ai un espace admin, mais pour l'instant je cherche simple donc je transforme d'abord mon accueil en objet et mVC pour  ensuite de bien m’occuper le reste. Pour mon admin je souhaite tout simplement d'afficher les articles avec le menu . Tout d'abord j'ai mon index.html ou je fait appel à contrôleur

    <?php
    use\projet\controller\PostView;
    //include ('controller/PostView.php');
    echo'test';



    voici mon contrôleur

    <?php
    namespace projet\controller;
    use projet\model\PostManager;
    
    
    class PostView
    {
    
        function listTravel()
        {
            $listManager = new PostManager(); //objet crée
            $list = $listManager->getTravel(); //appel une fonction de cet objet
            include('../view/travelView.php');
        }
    
        function listMenu()
        {
            $listManager = new PostManager();
            $list = $listManager->getMenu();
            include('../view/template.php');
    
        }
    
    
    
    }
     

    il va chercher le model

    <?php
    
    namespace projet\model;
    use projet\config\Database;
    
    use \PDO;
    use projet\controller\PostView;
    
    
    class PostManager
    {
    
    
        private $connexion;
    
        /**
         * @return PDO|null
         */
        public function getConnexion()
        {
            return $this->connexion;
        }
    
        /**
         * @param PDO|null $connexion
         */
        public function setConnexion($connexion)
        {
            $this->connexion = $connexion;
        }
    
    
    
        public function __construct( ){
    
            $db=new Database();
    
    
            $this->connexion=$db->getConnection();
        }
    
        function getTravel()
        {
            $db = getConnection();
            $statement = $db->prepare('SELECT * FROM mesVoyages WHERE mesVoyages.id_cat=?');
            $statement->execute(array($categ['idcat']));
            return $statement;
        }
    
        function getMenu()
        {
            $db = getConnection();
            $statement = $db->query("SELECT * FROM categorie");
            $categorie = $statement->fetchAll();
    
            return $categorie;
        }
    
    }
    
    
    

    au passage mon fichier database

    <?php
    
    namespace projet\config;
    
    
    class Database{
    
        // specify your own database credentials
        private $_host = "localhost";
        private $_db_name = "travelArm";
        private $_username = "phpmyadmin";
        private $_password = "phpmypasswd";
        private $_conn;
    
    
        // get the database connection
        public function getConnection(){
    
            $this->_conn = null;
    
            try{
                $this->_conn = new \PDO("mysql:host=" . $this->_host . ";dbname=" . $this->_db_name, $this->_username, $this->_password);
                $this->_conn->exec("set names utf8");
            }catch(PDOException $exception){
                echo "Connection error: " . $exception->getMessage();
            }
    
            return $this->_conn;
        }
    }
    ?>

    ensuite il retourne vers le controlleur pour aller vers la vue

    j'ai deux vu et un template

    <?php
    require_once ('travelView.php');
    require_once ('travelMenu.php');
    ?>
    
    <!doctype html>
    <html lang="fr">
        <head>
            <meta charset="UTF-8">
    
            <title>Voyage en Arménie</title>
    
    
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
            <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
    
            <link rel="stylesheet" href="../public/css/style.css">
    
            <link href="https://fonts.googleapis.com/css?family=Luckiest+Guy&display=swap" rel="stylesheet">
            <link href="https://fonts.googleapis.com/css?family=Barlow+Condensed&display=swap" rel="stylesheet">
            <link href="https://fonts.googleapis.com/css?family=Anton&display=swap" rel="stylesheet">
            <link href="https://fonts.googleapis.com/css?family=Kanit&display=swap" rel="stylesheet">
    
            <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
                  integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
            <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
                    integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
                    crossorigin="anonymous"></script>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
                    integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
                    crossorigin="anonymous"></script>
            <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
                    integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
                    crossorigin="anonymous"></script>
        </head>
    
    
        <body>
            <div class="container site">
                <h1 class="text-logo"><span class="glyphicon glyphicon-plane">Voyage en Arménie<span
                            class="glyphicon glyphicon-plane"></h1>
    
                <div class="menuM">
                    <?= $menuM ?>
                </div>
    
                <div class="contentM">
                    <?= $contentM ?>
                </div>
    
    
            </div>
    
    
        </body>
    </html>

    -----

    <?php ob_start(); ?>
    
    <?php
    echo '<div id="element" class="tab-content">';
    foreach ($categorie as $categ) {
        if ($categ['idcat'] == '1')
            echo '<div class="tab-pane active" id="' . $categ['idcat'] . '">';
        else
            echo '<div class="tab-pane" id="' . $categ['idcat'] . '">';
        echo '<div class="row">';
    
    
        while ($obj = $statement->fetch()) {
            echo '    <div class="col-sm-6 col-md-4">';
            echo ' <div class="thumbnail">';
            echo ' <img class="img-responsive" src="image/' . $obj['image'] . '">';
            echo '  <div class="price">' . $obj['prix'] . '€</div>';
            echo '   <div class="caption">';
            echo '       <h4>' . $obj['nomVoyage'] . '</h4>  ';
            echo   mb_strimwidth($obj['description'], 0, 500, "...");
            echo   '<a href="viewMain.php?idVoyage='.$obj['idVoyage'].'"> Voir plus </a>';
    
            //  echo '       <p> ' . $obj['description'] . '  </p>';
    
            echo ' </div>';
            echo '   <div class="reserver">   <a id="reserver" href="#" class="btn btn-order" role="button">   Réserver</a> </div>';
            echo '  </div>';
            echo '  </div>';
    
        }
        echo '</div>';
        echo '</div>';
    }
    echo '</div>';
    
    ?>
    
    <?php $contentM = ob_get_clean(); ?>
    
    <?php require('template.php'); ?>

    ----

    <?php ob_start(); ?>
    
        <?php
    
        echo '<nav>';
        echo '<ul class="nav nav-pills">';
    
        foreach ($categorie as $categ) {
            if ($categ['idcat'] == '1')
                echo '<li role="presentation" class="active"><a href="#' . $categ['idcat'] . '"data-toggle="tab">' . $categ['lesCat'] . '</a></li>';
            else
                echo '<li role="presentation"><a href="#' . $categ['idcat'] . '"data-toggle="tab">' . $categ['lesCat'] . '</a></li>';
        }
    
    
        echo '</ul>';
        echo '</nav>';
    
        ?>
    
    
    <?php $menuM = ob_get_clean(); ?>
    
    
    
    <?php require('template.php'); ?>
    



    et après normalement il realise l'affichage. mon projet davant il marchait très bien il n'y avait pas d'erreur de code. Je pense c'est au niveau du controlleur car mon code j'ai mit dans les fonctions. Et je pense il n'arrive pas à faire des appel avec les differerents de fichier.

    mon arborescence 

    projet

    • config
    •      Database.php
    • controller
    •      PostView.php
    • model
    •      PostManager.php
    • public
    •     css
    •     image
    • view
    •     template.php
    •     travelMenu.php
    •     travelView.php
    • index.php

    Je vous remercie d'avance pour votre aide.

    J'espère de trouver la solution.

    Rafael








    -
    Edité par RafaelYavryan 12 décembre 2019 à 18:18:55

    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2019 à 18:31:14

      Bonsoir,

      Quel est l'erreur obtenue ?

      • Partager sur Facebook
      • Partager sur Twitter

      Postez votre code et vos msg d'erreurs - "ça marche pas" n'est pas un message d'erreur ...

        12 décembre 2019 à 19:31:29

        Je n'ai pas d'erreur obtenu . C'est juste il m'affiche rien . Je fait mon test de echo il m'affiche, donc il trouve la page
        • Partager sur Facebook
        • Partager sur Twitter
          12 décembre 2019 à 19:39:44

          As-tu essayer :

          use projet\controller\PostView;

          au passage il n'a pas d'espaces entre use et la suite sur ton code, est ce la même sur le code original ?

          -
          Edité par Mehddii 12 décembre 2019 à 19:40:38

          • Partager sur Facebook
          • Partager sur Twitter

          Postez votre code et vos msg d'erreurs - "ça marche pas" n'est pas un message d'erreur ...

            13 décembre 2019 à 7:06:11

            Bonjour, merci pour votre réponse.

            J'ai appris à utiliser use comme ça. Je viens de changer tout les use mais ça ne charge rien

            ------

            ReBonjour.

            J'ai fait quelques chagements sur mon code voici les erreurs que j'obtiens 

            [Fri Dec 13 15:35:35 2019] 127.0.0.1:52630 [200]: /public/css/style.css
            [Fri Dec 13 15:35:54 2019] PHP Warning:  require(projet/controller/PostView.php): failed to open stream: No such file or directory in /media/Qi/ryavryan/PojetWebPhp2019/P_MVC_OBJET_V1/projet/index.php on line 9
            [Fri Dec 13 15:35:54 2019] PHP Fatal error:  require(): Failed opening required 'projet/controller/PostView.php' (include_path='.:/usr/share/php') in /media/Qi/ryavryan/PojetWebPhp2019/P_MVC_OBJET_V1/projet/index.php on line 9
            [Fri Dec 13 15:35:54 2019] 127.0.0.1:52640 [500]: / - require(): Failed opening required 'projet/controller/PostView.php' (include_path='.:/usr/share/php') in /media/Qi/ryavryan/PojetWebPhp2019/P_MVC_OBJET_V1/projet/index.php on line 9
            [Fri Dec 13 15:35:54 2019] 127.0.0.1:52642 [200]: /public/css/style.css

            Je pense il n'arrive pas a trouver le bon ficher ou bien l'appel à la fonction se fait pas correctectement.

            Voici mon index

            <?php
            use \projet\controller\PostView;
            //include ('controller/PostView.php');
            echo'test';
            
            function chargerClasse($classe)
            {
                $classe=str_replace('\\','/',$classe);
                require $classe . '.php';
            }
            
            spl_autoload_register('chargerClasse'); //fin Autoload
            
            ?>
            
            <!doctype html>
            <html lang="fr">
            <head>
                <meta charset="UTF-8">
            
                <title>Voyage en Arménie</title>
            
            
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
                <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
                <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
            
                <link rel="stylesheet" href="../public/css/style.css">
            
                <link href="https://fonts.googleapis.com/css?family=Luckiest+Guy&display=swap" rel="stylesheet">
                <link href="https://fonts.googleapis.com/css?family=Barlow+Condensed&display=swap" rel="stylesheet">
                <link href="https://fonts.googleapis.com/css?family=Anton&display=swap" rel="stylesheet">
                <link href="https://fonts.googleapis.com/css?family=Kanit&display=swap" rel="stylesheet">
            
                <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
                      integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
                <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
                        integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
                        crossorigin="anonymous"></script>
                <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
                        integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
                        crossorigin="anonymous"></script>
                <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
                        integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
                        crossorigin="anonymous"></script>
            </head>
            
            
            <body>
            <div class="container site">
                <h1 class="text-logo"><span class="glyphicon glyphicon-plane">Voyage en Arménie<span
                                class="glyphicon glyphicon-plane"></h1>
            
                <?php
            
                    $managerMenu=new PostView();
                    //$managerList=new PostView();
            
                    if(empty($_GET)){
                        $managerMenu->listMenu();
            
            
                    }
                    /*
                if(empty($_GET)){
                    $managerList->listTravel();
            
                }
            */
                ?>
                <div class="menuM">
                    <?= $menuM ?>
                </div>
            
                <div class="contentM">
                    <?= $contentM ?>
                </div>
            
            
            </div>
            
            
            </body>
            </html>
            
            
            
            
            
            
            
            
            



            -
            Edité par RafaelYavryan 13 décembre 2019 à 15:43:07

            • Partager sur Facebook
            • Partager sur Twitter

            Transformer son projet en MVC et Objet

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown