Subversion Repositories Applications.framework

Rev

Rev 89 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 89 Rev 93
1
<?php
1
<?php
2
/**
2
/**
3
 * Classe modèle, donc d'accès au données, elle ne devrait pas être appelée de l'extérieur.
3
 * Classe modèle, donc d'accès au données, elle ne devrait pas être appelée de l'extérieur.
4
 * Elle fait office d'abstraction légère de base de données en utilisant les objects PDO natifs 
4
 * Elle fait office d'abstraction légère de base de données en utilisant les objects PDO natifs 
5
 * de PHP
5
 * de PHP
6
 * Elle est abstraite donc doit obligatoirement être étendue.
6
 * Elle est abstraite donc doit obligatoirement être étendue.
7
 */
7
 */
8
abstract class Modele {
8
abstract class Modele {
9
 
9
 
10
	/**
10
	/**
11
	 * registre global
11
	 * registre global
12
	 */
12
	 */
13
	private $registre;
13
	private $registre;
14
	/**
14
	/**
15
	 * Gestionnaire d'exceptions php
15
	 * Gestionnaire d'exceptions php
16
	 */
16
	 */
17
	private $gestionnaire_exception;
17
	private $gestionnaire_exception;
18
	/**
18
	/**
19
	 * Gestionnaire d'erreurs php
19
	 * Gestionnaire d'erreurs php
20
	 */
20
	 */
21
	private $gestionnaire_erreur;
21
	private $gestionnaire_erreur;
22
	/**
22
	/**
23
	 * DSN pour accéder à la base de données
23
	 * DSN pour accéder à la base de données
24
	 */
24
	 */
25
	private $dsn;
25
	private $dsn;
26
	/**
26
	/**
27
	 * Type de base de données (mysql, mysqli, etc ...)
27
	 * Type de base de données (mysql, mysqli, etc ...)
28
	 */
28
	 */
29
	private $type;
29
	private $type;
30
	/**
30
	/**
31
	 * Hote herbergeant la base de données
31
	 * Hote herbergeant la base de données
32
	 */
32
	 */
33
	private $hote;
33
	private $hote;
34
	/**
34
	/**
35
	 * Nom de la base de données à laquelle le modèle doit se connecter
35
	 * Nom de la base de données à laquelle le modèle doit se connecter
36
	 */
36
	 */
37
	private $bdd_nom;
37
	private $bdd_nom;
38
	/**
38
	/**
39
	 * Nom d'utilisateur
39
	 * Nom d'utilisateur
40
	 */
40
	 */
41
	private $utilisateur;
41
	private $utilisateur;
42
	/**
42
	/**
43
	 * Mot de passe
43
	 * Mot de passe
44
	 */
44
	 */
45
	private $pass;
45
	private $pass;
46
	/**
46
	/**
47
	 * Connexion à la base de données
47
	 * Connexion à la base de données
48
	 */
48
	 */
49
	private $connexion = null;
49
	private $connexion = null;
50
 
50
 
51
	/**
51
	/**
52
	 * Constructeur par défaut, appelé à l'initialisation
52
	 * Constructeur par défaut, appelé à l'initialisation.
53
	 */
53
	 */
54
    final public function __construct() {
54
    final public function __construct() {
55
    	// les différents paramètres nécessaires sont lus à partir du registre
55
    	// les différents paramètres nécessaires sont lus à partir du registre
56
    	$this->registre = Registre::getInstance();
56
    	$this->registre = Registre::getInstance();
57
    	$this->gestionnaire_erreur = GestionnaireErreur::getInstance();
57
    	$this->gestionnaire_erreur = GestionnaireErreur::getInstance();
58
    	$this->type = Config::get('bdd_protocole');
58
    	$this->type = Config::get('bdd_protocole');
59
    	$this->hote = Config::get('bdd_serveur');
59
    	$this->hote = Config::get('bdd_serveur');
60
    	$this->bdd_nom = Config::get('bdd_nom');
60
    	$this->bdd_nom = Config::get('bdd_nom');
61
    	$this->utilisateur = Config::get('bdd_utilisateur');
61
    	$this->utilisateur = Config::get('bdd_utilisateur');
62
    	$this->pass = Config::get('bdd_mot_de_passe');
62
    	$this->pass = Config::get('bdd_mot_de_passe');
63
    	
63
    	
64
    	$this->dsn = $this->type.':dbname='.$this->bdd_nom.';host='.$this->hote;
64
    	$this->dsn = $this->type.':dbname='.$this->bdd_nom.';host='.$this->hote;
65
    }
65
    }
66
    
66
    
67
    /**
67
    /**
68
     * Fonction qui appelle la bonne fonction de requete suivant le type de bdd 
68
     * Fonction qui appelle la bonne fonction de requete suivant le type de bdd.
-
 
69
     * 
69
     * @param string la requete à effectuer
70
     * @param string la requete à effectuer
70
     * @return PDOStatement un objet contenant le résultat de la requête
71
     * @return PDOStatement un objet contenant le résultat de la requête
71
     */
72
     */
72
    final protected function requete($requete) {
73
    final protected function requete($requete) {
73
    	// on ne se connecte que lors du premier appel à une requete (lazy connexion)
74
    	// on ne se connecte que lors du premier appel à une requete (lazy connexion)
74
    	if ($this->connexion == null) {
75
    	if ($this->connexion == null) {
75
    		$this->connecter();
76
    		$this->connecter();
76
    	}
77
    	}
77
		return $this->connexion->query($requete);
78
		return $this->connexion->query($requete);
78
    }
79
    }
79
    
80
    
80
    /**
81
    /**
81
     * Connecte à la base de données en utilisant les informations fournies par 
82
     * Connection à la base de données en utilisant les informations fournies par 
-
 
83
     * le fichier de configuration.
82
     * le fichier de configuration, private et final car n'a pas vocation a être appelée
84
     * private et final car n'a pas vocation a être appelée par l'utilisateur.
83
     * par l'utilisateur
85
     * 
84
     * @throws PDOException une exception dans le cas ou là connexion échoue
86
     * @throws PDOException une exception dans le cas ou là connexion échoue
85
     */
87
     */
86
    final private function connecter() {
88
    final private function connecter() {
87
    	// TODO: retirer le try catch et laisser le problème au gestionnaire d'exceptions    	
89
    	// TODO: retirer le try catch et laisser le problème au gestionnaire d'exceptions    	
88
		try {
90
		try {
89
		    $this->connexion = new PDO($this->dsn, $this->utilisateur, $this->pass);
91
		    $this->connexion = new PDO($this->dsn, $this->utilisateur, $this->pass);
90
		} catch (PDOException $e) {
92
		} catch (PDOException $e) {
91
			
93
			
92
		}
94
		}
93
    }
95
    }
94
    
96
    
95
    /**
97
    /**
96
     * protège une chaine de caractères avant l'insertion dans la base de données  
98
     * protège une chaine de caractères avant l'insertion dans la base de données  
97
     */
99
     */
98
    final protected function proteger($chaine) {
100
    final protected function proteger($chaine) {
99
    	// on ne se connecte que lors du premier appel à une requete
101
    	// on ne se connecte que lors du premier appel à une requete
100
    	if ($this->connexion == null) {
102
    	if ($this->connexion == null) {
101
    		$this->connecter();
103
    		$this->connecter();
102
    	}
104
    	}
103
    	return $this->connexion->quote($chaine);
105
    	return $this->connexion->quote($chaine);
104
    }
106
    }
105
    
107
    
106
    /**
108
    /**
107
     * Destructeur de classe, se contente de fermer explicitement la connexion
109
     * Destructeur de classe, se contente de fermer explicitement la connexion
108
     */
110
     */
109
    final public function __destruct() {
111
    final public function __destruct() {
110
    	if ($this->connexion != null) { 
112
    	if ($this->connexion != null) { 
111
	    	$this->connexion = null ;
113
	    	$this->connexion = null ;
112
    	}
114
    	}
113
    }
115
    }
114
}
116
}
115
?>
117
?>