Salut tout le monde,
J’essaye de me mettre au développement objet en PHP, pour m'entrainer j'ai essayé de développer une (très) petite applis.
Edit :
J'ai oublié de dire quel est le but de cette applis :
En gros elle permet d'ajouter un mail a la fois dans une base mysql (pour le serveur de messagerie) et dans un annuaire ldap via un formulaire. Rien de très complexe c'est histoire de comprendre les bases.
J'ai d'abord cherché à réalisé une structure que je pourrai réutiliser facilement pour de plus gros projet.
Je me suis inspiré du projet 'QuickSilver Forums', en essayant de simplifier au maximum et voilà ce que ça donne :
D'abord la structure des répertoires :
|-Racine\
|-inc\ contient des classes de bdd et le moteur de template
| |-ldap.php
| |-mysql.php
| |-template.php
|-func\ contient des classes héritées de la classe globale (les différentes fonctions de l'Apps)
| |-post.php classe qui gère le formulaire l'ajout modification de mail
| |-list.php classe la liste des mails
| |- ...
|
|-tpl\
| |-post.tpl
| |- ...
|
|-index.php le point d'entrée de l'Apps
|-global.php la classe globale de l'Apps
Détail des fichiers :
index.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
34
35
36
37
38
39
40
41
42
43
44
45 /* j'appelé ici les fichiers pour créer (instancier??) les objets */ require('../../inc/ldap.php'); require('../../inc/mysql.php'); require('../../inc/template.php'); /* je créer les objets (ldap, mysql, template) */ $ldapmail = new act_ldap; $dbmail = new hmail; $template = new template('./tpl'); /* je fait appel à ma classe principale */ require ('global.php'); /* les fonctions qui pourront être utilisée $modules['default_module'] = 'listmail'; $modules['public_modules'] = array( 'post', 'list'); /* via l'url je passe un paramêtre ($_GET['a'] qui précise quelle fonction je veux utiliser */ /* ex. index.php?a=post */ if (!isset($_GET['a']) || !in_array($_GET['a'], array_merge($modules['public_modules']))) { $module = $modules['default_module']; } else { $module = $_GET['a']; } /* si cette fonction est autorisé je charge le fichier correspondant */ require('func/'.$module.'.php'); /* je créer l'objet relatif à ma fonction */ $m = new $module($ldapmail,$dbmail,$template); /* je l'excute */ $m->execute(); //---> détail dans le fichier post.php
global.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 class messagerie { var $dbmail; //mon objet mysql pour le serveur de messagerie var $ldapmail; //mon objet pour le serveur ldap var $get = array(); //le contenu de la variable $_GET var $post = array(); //le contenu de la variable $_POST var $template; //Mon objet pour le moteur de template /* Constructeur : j'initialise mes objet ??? */ function messagerie ($ldapmail=null,$dbmail=null,$template) { $this->dbmail = $dbmail; $this->ldapmail = $ldapmail; $this->template = $template; $this->get = $_GET; $this->post = $_POST; } }
post.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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 class post extends messagerie { /* Suivant un paramètre dans l'url cette on exécute une des fonctions de la classe */ function execute() { if(isset($this->get['f'])) { switch($this->get['f']) { case 'new': $this->newMail(); break; case 'mod': $this->modMail(); break; } } /* Cette fonction créer un nouveau mail (insertion dans ldap et mysql) */ function newMail() { //initialisation des variables $nom = ''; $prenom = ''; $nMail = ''; if (isset($this->post['submit'])) //si l'utilisateur tente d'envoyer le formulaire { //recuperation des variables $nom = $this->post['nom']; $prenom = $this->post['prenom']; $nMail = $this->post['nMail']; //construction des données ldap $info['mail']=$nMail; $info['sn']=$nom; $info['givenName']=$prenom; $dn = 'cn='.$nom.' '.$prenom.'ou=Mail'; //insertion des données $this->ldapmail->bind(); $insLdap = $this->ldapmail->addUser($dn,$info); $insHmail = $this->dbmail->insertMail($domId,$nMail,$passMail); } //initialisation du fichier pour le moteur de template $this->template->set_filenames(array('post' => 'post.tpl')); //envoi des variables au template $this->template->assign_vars(array( 'nom' => $nom, 'prenom' => $prenom, 'nMail' => $nMail, 'titreForm' => 'Création d\'une nouvelle adresse', 'actionForm' => 'index.php?a=post&f=new', 'submitForm' => 'Valider')); //affichage du template $this->template->pparse('post'); }
J'aimerais avoir vos critiques là dessus.
De plus j'ai quelques questions ?
- J'ai l'impression que ma classe globale n'a pas vraiment d'intérêt ?
- la gestion des template ne me parait pas optimal (utiliser une partie dans la classe globale ?).
Partager