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 :

Formulaire en MVC


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Par défaut Formulaire en MVC
    Bonjour tout le monde, je poste une nouvelle discussion car j'ai besoin de vous.
    Je voudrais mettre en place un système de formulaire mais avec le pattern MVC le tout en PHP.


    ma classe singleton

    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
    <?php
    /**
     * Classe MySqlConnection : singleton
     */
     
    class Singleton {
        private static $instance;
     
      const DEFAULT_SQL_USER = 'root';
      const DEFAULT_SQL_PORT = '3306';
      const DEFAULT_SQL_HOST = 'localhost';
      const DEFAULT_SQL_PASS = '';
      const DEFAULT_SQL_DTB = 'test';
     
    private function __construct()   {
      try
         {
          $this->PDOInstance = new PDO('mysql:host='.self::DEFAULT_SQL_HOST.';port='.self::DEFAULT_SQL_PORT.';dbname='.self::DEFAULT_SQL_DTB,self::DEFAULT_SQL_USER ,self::DEFAULT_SQL_PASS,array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
         }
      catch (PDOExeption $e)
         {
           die("Erreur ! Connection serveur SQL impossible !" );
         }
      }
     
    	public static function getInstance() {
    		if(!isset(self::$instance) || self::$instance == null)
                        {
    			self::$instance = new Singleton();
                        }
    		return self::$instance; 
    	}
     
            public function prepare($query)
      {
        return $this->PDOInstance->prepare($query);
      }
     
            public function query($query)
      {
        return $this->PDOInstance->query($query);
      }
    }
     
    ?>
    voici ma classe Article (modele)

    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
    <?php
    class Article{
     
        private $id;
        private $titre;
     
        function __construct($titre=null, $id=null) {
            $this->id = $id;
            $this->titre = $titre;
        }
     
        public function getId() {
            return $this->id;
        }
     
        public function setId($id) {
            $this->id = $id;
        }
     
        public function getTitre() {
            return $this->titre;
        }
     
        public function setTitre($titre) {
            $this->titre = $titre;
        }
    }
    ?>
    Voici mon 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
    <?php
    require_once 'class.singleton.php';
    require '../model/class.article.php';
     
    class ManageArticle{
     
     
        public static function add(Article $article)
        {
            $connexion = Singleton::getInstance();
            $sql =$connexion->prepare("insert into article(`titre`) VALUES ('".$article->getTitre()."')");
            $sql->execute();
            $article->setId($connexion->insert_id());
            return true;
        }
     
     
       public static function getAll()
       {
            $connexion = Singleton::getInstance();
            $ress = $connexion->prepare("select * from article");
            $ress->execute();
            $listArticle = array();
     
            foreach ($ress as $value) 
            {
                $listArticle[] = new Article($data['titre'],$data['id_article']);
            }
     
            return $listArticle;
        }
    }
    ?>
    Et ma vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    require_once"../controller/control.article.php";
     
    $ajout = new ManageArticle();
    add($ajout);
     
     
    $fonction = ManageArticle::getAll();
     
     
    echo "<pre>";print_r($ajout);
    echo "<pre>";print_r($fonction);die;
     
    ?>
    Lorsque j'execute le programme j'ai le message d'erreur suivant:

    Fatal error: Call to undefined function add() in C:\wamp\www\MVC_FORM\view\liste.php on line 5
    Pouvez-vous m'aider svp
    Meric beaucoup

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur PHP
    Inscrit en
    Mai 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur PHP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 37
    Par défaut
    Pas trop MVC tout ça.
    La vue ne fait que l'affichage des données fournies par le contrôleur.
    Le contrôleur fait le lien entre le modèle et la vue.
    Ici dans ta vue il y a une instanciation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ajout = new ManageArticle();
    Il y a appel à une fonction add non définie.
    Ton controleur appelle la connexion BDD dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public static function add(Article $article)
        {
            $connexion = Singleton::getInstance();
            $sql =$connexion->prepare("insert into article(`titre`) VALUES ('".$article->getTitre()."')");
            $sql->execute();
            $article->setId($connexion->insert_id());
            return true;
        }
    cette partie devrait être en modèle.

    Pour finir pour résoudre ton erreur dans ta vue ligne 5 tu dois faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ManageArticle::add($ajout);
    Si tu as des questions à dispo.

    JFFM

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Par défaut
    Ha ok, je pensais justement à faire comme ceci:

    créer le modèle d'un article :

    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
    <?php
    class Article{
     
        private $id;
        private $titre;
     
        function __construct($titre=null, $id=null) {
            $this->id = $id;
            $this->titre = $titre;
        }
     
        public function getId() {
            return $this->id;
        }
     
        public function setId($id) {
            $this->id = $id;
        }
     
        public function getTitre() {
            return $this->titre;
        }
     
        public function setTitre($titre) {
            $this->titre = $titre;
        }
    }
    ?>
    Mais les requêtes comme l'insertion et la récupération des différentes données de la base ne doivent pas se faire dans le controller ??
    Comme je l'ai mis précédemment ? :

    Controller / control.article.php

    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
    <?php
    require_once 'class.singleton.php';
    require '../model/class.article.php';
     
    class ManageArticle{
     
     
        public static function add(Article $article)
        {
            $connexion = Singleton::getInstance();
            $sql =$connexion->prepare("insert into article(`titre`) VALUES ('".$article->getTitre()."')");
            $sql->execute();
            $article->setId($connexion->insert_id());
            return true;
        }
     
     
       public static function getAll()
       {
            $connexion = Singleton::getInstance();
            $ress = $connexion->prepare("select * from article");
            $ress->execute();
            $listArticle = array();
     
            foreach ($ress as $value) 
            {
                $listArticle[] = new Article($data['titre'],$data['id_article']);
            }
     
            return $listArticle;
        }
    }
    ?>
    et Donc l'affichage des données doivent aussi se faire dans le controller ?
    mais je fait un simple include dans ma vue du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <html>
    <head>
    </head>
    <body>
    <?php include_once"controller/control.article.php";
    </body>
    </html>
    Quelque chose comme ça ?

    Ou bien ma vue ne doit contenir que un simple formulaire ???


    j'ai penser une arborescence MVC comme ceci : Modele : création des variables et GET SET de mon objet :
    Controller : appel de la base et création des différentes requêtes.
    Vue : appel du controller + simple code HTML

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Par défaut
    Personne n'a d'idée pour mon petit problème,
    je ne trouve pas de solution sur les différents forums.

    merci de vos réponses

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    En effet , il y a un décalage dans ton mécanisme car tu vas au delà tu MVC, tu tentes d'implémenter également une ORM.

    Le modèle permet de représenter la bdd, mais également d'y accéder. Donc ce que tu appelles "contrôleur" plus haut est en fait une partie de ton modèle, et tu n'as pas de contrôleur.

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Par défaut
    Alors comment pourrais-je mettre le tout en place pour la structure soit bonne

Discussions similaires

  1. problème sur formulaire sans mvc
    Par cedrick21 dans le forum Zend_Form
    Réponses: 2
    Dernier message: 19/12/2012, 09h53
  2. Erreur dans un formulaire - Spring MVC
    Par Livingstone dans le forum Spring Web
    Réponses: 2
    Dernier message: 21/08/2012, 14h43
  3. Formulaire authentification MVC
    Par Kishin dans le forum Zend_Acl & Zend_Auth
    Réponses: 1
    Dernier message: 07/01/2009, 11h39
  4. Réponses: 6
    Dernier message: 17/06/2008, 12h04
  5. Formulaire et MVC
    Par jbin-1 dans le forum Langage
    Réponses: 1
    Dernier message: 09/02/2008, 11h19

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