begin process at 2012 02 05 02:39:26
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > [PHP5] ORMAPPER 4 CRUD

[PHP5] ORMAPPER 4 CRUD


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :ORM, Reflection, Mapping, classe, php5 Niveau :Initié Date de création :07/12/2008 Date de mise à jour :17/12/2008 22:35:40 Vu / téléchargé :3 762 / 143

Auteur : Teclis01

Ecrire un message privé
Site perso
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Pourquoi réécrire moult fois les même choses ... A rien!
Ce petit mapper sans grande prétention permet de mapper une BdD mysql (il sera surement porté sur plus de db quand j'aurais le temps!) De plus il manque la notion de clef étrangère enfin moult choses !!!
Donc !

D'abord On configure VarType.cls.php pour définir quel type de donnée mysql sera géré par quel classe de Typage.

Ensuite, dans l'index.php il faut définir la BdD et le dossier ou il va cracher les classes.

Enfin, il faut copier les classes Boolean,Crud,Database,Factory,Float,Integer,Null,T ype,Node est c paré !

Un autoload et ça va vous booster le dev' !

Si vous voyez des coquilles, si vous voulez participer, si vous voulez quoique ce soit dites le ! :D

Have Fun'

Mise à jour : 17/12/2008

La mise à jour est arrivée et continuera d'arriver petit à petit!
Au programme j'ajoute quelques fonctionnalités et surtout des trucs qui marchait pas top fonctionneront :D (Oups^^)

ClassGenerator
la methode toXml est disponible, elle transforme un objet en xml tout simplement. A voir pour faire du XPath bientôt ^_^
(il faut copier aussi Node pour cette méthode)

CRUD
C : Create, on peut obtenir le nouvel enregistrement dans l'objet courant!
R : Retrieve, on peut "forcer" le cast des membres (Objet quand tu nous tiens ^^) et on peut utiliser le LIKE pour les String! (Yes i like String ;) désolé)
U : Update, On peut utiliser le LIKE :) On se base toujours sur la PK et on met a jour les membres n'ayant pas un Type contenant une instance de Null. Attention aux tables sans PK ça marche pas ! et ça vous plantera !
D : Delete, On peut utiliser le LIKE :) On se base sur tous les champs donné de type non Null

Classes de Typage "fort"
Forçage/Souplesse de cast vers le Type voulu si il correspond aux critères "logique"
'0' et '1' peuvent devenir un Integer et un Boolean
'100' peut devenir un Integer
Intégration de "nouveaux" types pour MySQL (ceux donnés par AKHENATHON)

J'ajoute "l'environnement de developpement"

1/Créer une BdD tester

y mettre une table de test...

CREATE TABLE `users` (
  `id_users` int(10) unsigned NOT NULL auto_increment,
  `login_users` varchar(50) NOT NULL,
  `password_users` varchar(50) NOT NULL,
  `email` varchar(200) NOT NULL,
  `money` int(10) unsigned NOT NULL,
  `coin` int(10) unsigned NOT NULL default '0',
  `active` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY  (`id_users`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=56 ;


Les reste est dans le dossier Tester donc configurez si nécessaire...
régénérez la classe si besoin puis ne modifiez que index.php dans Tester pour faire vos tests.

Je reste ouvert à toute proposition qui fera avancer :)


 Conclusion

Début d'un Fw maison !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

17 décembre 2008 22:32:29 :
La mise à jour est arrivée et continuera d'arriver petit à petit! Au programme j'ajoute quelques fonctionnalités et surtout des trucs qui marchait pas top fonctionneront :D (Oups^^) ClassGenerator la methode toXml est disponible, elle transforme un objet en xml tout simplement. A voir pour faire du XPath bientôt ^_^ (il faut copier aussi Node pour cette méthode) CRUD C : Create, on peut obtenir le nouvel enregistrement dans l'objet courant! R : Retrieve, on peut "forcer" le cast des membres (Objet quand tu nous tiens ^^) et on peut utiliser le LIKE pour les String! (Yes i like String ;) désolé) U : Update, On peut utiliser le LIKE :) On se base toujours sur la PK et on met a jour les membres n'ayant pas un Type contenant une instance de Null. Attention aux tables sans PK ça marche pas ! et ça vous plantera ! D : Delete, On peut utiliser le LIKE :) On se base sur tous les champs donné de type non Null Classes de Typage "fort" Forçage/Souplesse de cast vers le Type voulu si il correspond aux critères "logique" '0' et '1' peuvent devenir un Integer et un Boolean '100' peut devenir un Integer Intégration de "nouveaux" types pour MySQL (ceux donnés par AKHENATHON) J'ajoute "l'environnement de developpement" 1/Créer une BdD tester y mettre une table de test... CREATE TABLE `users` ( `id_users` int(10) unsigned NOT NULL auto_increment, `login_users` varchar(50) NOT NULL, `password_users` varchar(50) NOT NULL, `email` varchar(200) NOT NULL, `money` int(10) unsigned NOT NULL, `coin` int(10) unsigned NOT NULL default '0', `active` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id_users`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=56 ; Les reste est dans le dossier Tester donc configurez si nécessaire... régénérez la classe si besoin puis ne modifiez que index.php dans Tester pour faire vos tests. Je reste ouvert à toute proposition qui fera avancer :)
17 décembre 2008 22:34:36 :
Mise à jour : 17/12/2008
17 décembre 2008 22:35:40 :
Mise à jour : 17/12/2008

 Sources du même auteur

[PHP5] LIVE COUNTER || QUI EST EN LIGNE
Source avec Zip Source avec une capture JUKE BOX XMMS

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GÉNÉRATION DE FORMULAIRES HTML PERSONNALISÉS. par beejeridou
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
CLASSE PAGINATION par darkis
Source avec Zip [POO][PHP5]UN SITE MULTILANGUE VIA XML par destinyfr
Source avec Zip Source avec une capture XML MAPPING TO CLASS OBJECTS / CHARGEMENT / PARSING / MODIFI... par aKheNathOn

Commentaires et avis

Commentaire de aKheNathOn le 09/12/2008 18:12:51

Je lis le code et je te fais un retour, mais à première vue ça me semble très bien construit :)

Commentaire de Teclis01 le 10/12/2008 10:26:40

Merci beaucoup :)
J'attendais ce premier commentaire avec beaucoup d'espoir et ça fait vraiment plaisir!
Je modifierais petit a petit la source pour y ajouter un exemple, l'utilisation de la classe Database pour l'index >_< et une plus grande richesse de "composants" donc si ça vous intéresse restez dans le coin ^^

Commentaire de aKheNathOn le 10/12/2008 11:21:19

J'ai cette erreur :

Fatal error: Cannot clone object of class PDO due to 'zend.ze1_compatibility_mode' in ..\index.php on line 17

En mettant ça : $oPDO =& new PDO ... ça passe (PHP 5.2.6)

---

Après la partie sélection des tables ne passe pas chez moi - en remplaçant par ce code ça passe :

$sQuery = 'SELECT TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA=\''.$sDatabase.'\'';
$aResultTables = $oPDO->query($sQuery)->fetchAll();

---

Après j'ai une erreur de type : Connection failed: THE TYPE IS UNDEFINED. J'ai rajouté ces définitions dans VarType.cls.php :

'text'=>'String','blob'=>'String','timestamp'=>'Integer','mediumint' => 'Integer'

---

En regardant le résultat je vois :
const MODEL='a:6:{i:1;O:5:"Field":9:{s:20:"

Y'à une erreur quelque part car le serialize n'est pas finit.

Sinon serialize et unserialize c'est une perte de perfs, regardes du côté de : http://fr2.php.net/manual/en/function.var-export.php

---

Ptite remarque générale, dommage qu'au niveau de ton modèle tu ne gère pas les datasets - pour le moment tu est au niveau des entités, mais je ne vois pas comment tu peux gérer une requette de type select ... where ...

---

Je reste dans le coin ;),

Akh

Commentaire de Teclis01 le 10/12/2008 12:10:12

Alors le début vient de la config serveur :
http://www.manuelphp.com/php/ini.zend.ze1-compatibility-mode.php
De mon côté je ne gère pas le clonage de la classe PDO  
http://fr.php.net/pdo

Ensuite la modif pour donner database en string euh ... autant le faire à la mode PDO ^^ je modifierais pour ceci ...
$oPDOStatement->bindParam(':database', $sDatabase, PDO::PARAM_STR);
Il doit se vautrer sur le type de la variable.
Ce qui est une bonne remarque pour la classe Crud car je ne donne aucun type alors que je les ai!


Pour THE TYPE IS UNDEFINED, tu as bien fait de chercher dans VarType.cls.php
En fait, cette classe fait correspondre à un type de champs contenu dans DATA_TYPE une classe de gestion de type. Ta modif pour ajouter ces types semble correcte.

Je veux bien la structure de la table qui fait planter le serialize du model de la classe si c'est possible (pour comprendre pq ca pete un cable) ^_^
Le serialize est il est vrai lourd mais me sert a être réutilisable en JS! (c'est le seul moyen que je connaisse)

Pour Le Crud, je suis parti du principe que l'on ne change QUE les champs n'étant pas une clef primaire.
C :
Pour une insertion on met une instance de la classe Type "contenant" une instance de la classe Null dans la clef primaire du modèle. Ensuite, je construit la requete d'insertion.

R :
Pour un retrieve, je pars du principe qu'on connait que les champs d'une instance du modele/controleur.

PS: Au retour de la requete, je ne cast pas le ResultSet car a mon sens c'est un non sens (et une perte de perf). il revient sous forme de string il le reste puisque c'est sensé être affiché à 70% des cas d utilisation. A voir un param pour "forcer" le typage du retour!

U :
Pour un update, le fonctionnement est pareil que R

D :
Pour un delete, le fonctionnement est pareil que R

En gros je pars du principe que qd on veut qqch on fait une instance du model/controleur et on balance la méthode!

PS :
Il faut effacer les lignes euh ... 166 a 169 de Crud.cls.php (c'est du debug :p)

Commentaire de Teclis01 le 17/12/2008 22:37:51

Au secoursssss la prévisualisation met à jour sans mon avis :/
La mise en page du texte était degeu je l'ai passée dans l'explication de la source en ajoutant le date histoire d'avoir un espèce de versionning Au zecoursss les zadmineu >_<

Commentaire de Teclis01 le 04/01/2009 23:41:56

La prochaine release arrive bientôt !!! :)
Juste pour savoir si ça interesse qqun ou si ya des erreurs ou des choses mal pensées/mal faites dites le moi ça serait sympa...

Commentaire de dorian91 le 09/01/2009 12:12:16

Salut,
J'ai une petite suggestion quand tu génère la classe modele pourquoi ne fais tu pas une classe abstraite (Ex : abstract Crud) qui contient toutes les méthodes et tu fais etendre ta classe modele. Ca évite la redondance de code au pire tu génère juste le constructeur qui passe les paramètres qui faut a la classe Crud

Sinon j'ai pas encore testé je te dis mon avis apres mes test
A+

Commentaire de dorian91 le 10/01/2009 01:04:41

Re salut
Une autre petite suggestion pour tes requetes PDO utilise des requetes préparé comme ca tu evite les injections sql
A+

Commentaire de dorian91 le 10/01/2009 01:07:34

Euh en fait j'ai du halluciner car tu utilise des requetes prepare (dsl fatigué ^^)

Commentaire de Teclis01 le 13/01/2009 14:22:08

Euh je viens juste de voir tes remarques et euh je sais pas pq je fais comme ça...
Je suis en train de préparer une nouvelle mouture avec notamment les FK. Je me penche sur ta suggestion juste après :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Fonctionnement SDO [ par guill76 ] Bonjour,Je viens de découvrir un petit peu l'extension SDO de PHP5 que j'ai récupérée en installant PHP5.2.5 il ya environ un semaine et dans cette ex [PHP5] Etendre une classe prédéfinie [ par ZuGbEn ] Bonjour !Je débute plus ou moins dans la programmation orientée objet, et je souhaite faire une classe qui, à partir d'un DomNode existant, ajoute des inclusion d'une classe provenant d'un autre fichier [ par lilippx ] salut, je me suis mis au php ce matin mais je bute sur un petit truc (dès le premier jour, ce n'est pas motivant...)je n'arrive pas à instancier un ob utilisation de ereg_replace php5 [ par NINI49 ] Bonjour, Ce code marchait sous PHP4 Il supprimait tout les liens d'une page récupérée sur un site de résultat de sport (basketfrance.fr en l'occurence net_ping et windows [ par Lyche ] Bonjour à tous.Je suis en train de travailler sur un petit projet de monitoring, j'ai trouvé la classe net_ping() qui me parait idéale pour ce que sou Classes et vérification des données [ par TTMan ] Bonjour à tous,Je viens pour poser une question peut-être stupide, mais je voudrais savoir s'il est plus intelligent et maintenable de vérifier les do Refonte de mon site en objet AIDE conception [ par vega11 ] Bonjour à tous, je suis actuellement en BTS informatique 2ème année et je m'amuse à créer pour une de mes activités un site de rencontre.Je suis très Site sur php5, Mysql5 [ par laaouar_ibtissem ] Bonjour, Est ce que possible de me donner un site de debutant concernant php5, Mysql5. Merci Classe fpdf et limitation du temps d'execution à 30 secondes [ par stevenleferran ] Bonjour,voilà, j'ai développé un site web gérant des articles de presse scannés.A l'aide de formulaire et de notre bdd, nous pouvons générer un fichie Boutique en ligne [ par Foxhive ] Bonjour à tous,Je voudrais creer une boutique en ligne et j'ai regardé cette classe : http://www.phpcs.com/codes/CLASSE-PHP5-PANIER-TOUTE-SIMPLE_34003


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,304 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales