Gestionnaire de modèles sql

Soyez le premier à donner votre avis sur cette source.

Vue 6 303 fois - Téléchargée 339 fois

Description

Suite à la discussion que nous avons eue avec destinyfr sur la source http://www.phpcs.com/codes/CMS-MY-GESTION-CMS-100-OPEN-SOURCE_48285.aspx, voici comment je procède sur mes sites pour tout ce qui touche à la base de donnée.

Pour détailler, j'utilise deux classes principales suivit de n classes pour les modèles.
La première classe s'appelle PdoManager, et s'occupe de la création de l'instance de PDO et du chargement des modèles.
La deuxième classe s'appelle PdoModel, et est une classe (que j'aurai dû mettre abstraite) qui va éviter la redondance de code pour les modèles. En fait elle ne contient qu'une variable protected et une fonction, __construct, qui recoit l'instance de PDO et l'enregistre dans la variable protected.

Les classes modeles n'auront qu'à étendre PdoModel et faire mumuse avec $this->_oPdo->* !

Voici un exemple de l'implémentation de telles classes :

Source / Exemple :


<?php
// On défini le repertoire ou se trouvent les modeles
define ('MODELS_DIR', 'classes/Models/');
// Bien sûr, on peux agir différement (le passer en paramètre, etc)

// On inclut PdoManager
require_once ('classes/PdoManager.php');

// On instancie une connection vers PDO au travers de PdoManager
$oPdoInstance = PdoManager::init (array ('dsn' => 'mysql:host=127.0.0.1', 'username' => 'root', 'password' => 'root'));

// Maintenant, l'instance de PDO n'appartient qu'aux classes PdoManager et PdoModel(filles)
// on ne peux pas accéder à pdo depuis l'extérieur de ces classes

// Pour jouer avec la base de donnée, on doit charger un model, par exemple users :
$oUsers = $oPdoInstance->load ('Users');

// Puis on appele une fonction, telle que selectFromId
$aUser = $oUsers->selectFromId (1);

// On affiche son contenu vite fait
echo '<pre>';
var_dump ($aUser);
echo '</pre>';

// On modifie la valeur
$aUser['login'] = 'Alfred';

// On affiche son contenu après modification
echo '<pre>';
var_dump ($aUser);
echo '</pre>';

// Et on met à jour
echo '<pre>';
var_dump ($oUsers->update (1, $aUser));
echo '</pre>';
?>

Conclusion :


Le code présent ci-haut est un code vite fait pour présenter l'usage des classes utilisées pour la gestion de models. (c'est pas très joli joli, mélange du code html/php, etc).

Juste pour vous donner une idée des possibilités que l'on as avec les classes PdoManager/PdoModel telle que je les implémentes.

N'hésitez pas à proposer des améliorations, des conseils, des optimisations et à apporter votre avis sur la chose afin d'améliorer, toujours améliorer, un code :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
Oui en effet, j'ai l'habitude de mettre la base avec la table, et donc forcément, le script ne risque pas de marcher si votre base ne s'appelle pas opel :s

Merci d'avoir relevé l'erreur, je corrigerai au plus vite ! :)
destinyfr
Messages postés
106
Date d'inscription
samedi 19 mai 2007
Statut
Membre
Dernière intervention
13 avril 2009

oulalalala désolé pour l'erreur ^^' cela venait d'une erreur toute bête dans la source :

Ta table ce nom : User
Dans le code tu recherche sur : opel.Users

Voilà l'erreur ^^

Tin voilà une chose qui pourrais ce voir être rajouté :) éviter les grosses lignes comme ça dès qu'une erreur arrive :)

Encore désolé :)
destinyfr
Messages postés
106
Date d'inscription
samedi 19 mai 2007
Statut
Membre
Dernière intervention
13 avril 2009

Salut

C'est en ce qui concerne la source ^^

Désolé je pensais avoir posté l'erreur :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user '******'@'*******' for table 'Users'' in /testclass/classes/Models/Mysql/Users.php:24 Stack trace: #0 /testclass/classes/Models/Mysql/Users.php(24): PDOStatement->execute(Array) #1 /testclass/index.php(18): Users->selectFromId(1) #2 {main} thrown in /testclass/classes/Models/Mysql/Users.php on line 24

Y a du bordel ^^ (un message comme celui la jamais vu encore XD).

J'ai bien essayé de rajouter dans les dns (page index.php) le nom de la base de donnée mais rien à faire :(
codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
ma source ou un des commentaires ? (si oui, préciser qui :p)

Ma source à été testé sur mon serveur, pourrais tu donner plus de détails sur l'erreur générée ?

Merci :)
destinyfr
Messages postés
106
Date d'inscription
samedi 19 mai 2007
Statut
Membre
Dernière intervention
13 avril 2009

As-tu essayé la classe sur un serveur web ? parce que quand je remplis les champs dans le fichier index, avec ou sans la BDD name (informations pour faire la connexion), je reçois une erreur de type uncatchable.

peut-être que cela vien de moi ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.