
06 juil
Par Clément dans Tutoriels
Mots-clefs :Application, Base de données, PHP, SQL, Watchmydesk, Zend, Zend Framework, Zend_Db_Table

Dans cette seconde partie, nous allons voir comment préparer la base de données pour notre application WatchMyDesk développée avec le Zend Framework et vous allez enfin savoir ce que va être notre application !
Les acteurs du web sont souvent fiers de leur bureau de travail. De temps en temps, on peut retrouver l’espace de travail de certain d’entre eux.

Les gens aiment particulièrement voir dans quel contexte travail telle ou telle personne.
L’objectif est de créer une plateforme communautaire sur laquelle les internautes peuvent créer la fiche de leur bureaux et ajouter une ou plusieurs photos.
L’aspect communautaire intervient grâce à la possibilité de commenter et donner une note aux bureaux.
Au niveau des fonctionnalités, nous avons du pain sur la planche. Mis en place dans le premier épisode, nous avons deux modules : Frontend et Backend. Ces deux dossier correspondent à la partie visible de site par un visiteur/membre et à l’administration.
Dans la partie frontend, nous allons avoir sur l’index, les 5 derniers bureaux postés, les 5 bureaux populaires et les accès rapide pour s’inscrire et s’identifier.
Dans la liste des bureaux, on aura une liste paginée avec les miniature et une courte description. On aura aussi la possibilité de trier la liste par titre, auteur, etc…
Dans la partie des détails du bureau, on aura toute les informations sur le bureau ainsi que la possibilité de lui mettre une note et d’ajouter un commentaire.
Une fois inscrit, le membre pourra ajouter son bureau avec un formulaire complet.
Dans la partie administration, on pourra gérer les membres inscrits, les commentaires, les bureaux, et voir les statistiques.
La création de la base de données va se passer à partir de phpMyAdmin de notre serveur local, à l’heure d’aujourd’hui le Zend Framework ne possède pas de processus de migration de base de données et de génération de table à la demande.
Pour cela, je vous met à disposition le .sql de notre base de données que vous importerez dans une base nommé watchmydesk.
Dans ce fichier sql, nous retrouvons 6 tables nommées :
Vous avez surement remarqué la table de liaison bureaux_photos, cette table sera très utile pour déterminé quel est la photos principale à afficher. Mais je vous en parlerais plus dans le prochaine épisode.
Sans m’en rendre compte, je vous ai donnée cette partie la semaine dernière dans le premier épisode, enfaite, la configuration se fait grâce au 7 lignes dans le fichier application.ini que nous avons configuré.
; initialize database resources.db.adapter = "MYSQLI" resources.db.params.host = "localhost" resources.db.params.username = "root" resources.db.params.password = "root" resources.db.params.dbname = "watchmydesk" resources.db.params.date_format = "YYYY-MM-ddTHH:mm:ss" resources.db.isDefaultTableAdapter = true
Selon Wikipédia : Le modèle représente le comportement de l’application : traitements des données, interactions avec la base de données, etc. Il décrit ou contient les données manipulées par l’application. Il assure la gestion de ces données et garantit leur intégrité. Dans le cas typique d’une base de données, c’est le modèle qui la contient. Le modèle offre des méthodes pour mettre à jour ces données (insertion, suppression, changement de valeur). Il offre aussi des méthodes pour récupérer ces données. Les résultats renvoyés par le modèle sont dénués de toute présentation. Dans le cas de données importantes, le modèle peut autoriser plusieurs vues partielles des données.
Dans notre cas, nous allons voir comment créer notre modèle afin d’effectuer des opérations sur la table bureaux créée précédemment.
Nous allons donc créer un fichier nommé Bureaux.php dans le répertoire models/DbTable/ de notre application.
Dans ce fichier, nous allons ajouter quelques lignes de code que je vais vous expliquer par la suite :
class Model_DbTable_Bureaux extends Zend_Db_Table
{
protected $_name = 'bureaux'; // On donne le nom de le table à laquelle se connecter
}Le composant Zend_Db_Table est utilisé pour manipuler des données.
Ici on peut voir une utilisation de l’héritage dans un langage orienté objet. En effet, en héritant de la classe Zend_Db_Table, le modèle va donc posséder toutes les actions de la classe parente pour modifier, supprimer, créer et lire les informations dans la table.
Ensuite pour tester si notre application fonctionne bien, nous allons nous rendre dans le dossier /application/modules/frontend/controllers et éditer le fichier IndexController et modifier notre action indexAction :
public function indexAction(){
$bureaux = new Model_DbTable_Bureaux();
var_dump($bureaux->fetchAll());
}Il vous suffit d’aller ensuite sur votre site locale et de voir ce qui apparait. Si la connexion c’est bien passée, vous devriez avoir un énorme tableaux de données mais sans aucun enregistrement (normal, la base de données est vide).
Dans cet épisode, nous avons vu comment mettre en place la base de donnée pour une application développée avec le Zend Framework. Cette initiation va nous permettre d’attaquer un peu plus fort la semaine prochaine en nous penchant sur les relations dans les bases de données.
Vous trouverez la même partie de ce tutorial pour Symfony sur La Ferme Du Web.
Je vous dis à Lundi prochain, pour la mise en place du MVC dans le Zend Framework.
« Utiliser la géolocalisation avec Safari, IE et Firefox comme Flickr mobile | jQuery Visualize, des graphiques avec du javascript et des canvas HTML »
Un trackback
19 commentaires
Benji07
6 juillet 2009 à 19:24
1Il ne manquerai pas le fichier sql ?
Clément
6 juillet 2009 à 21:17
2@Benji07: Je viens de le mettre, j’ai eu quelques soucis avec le blog ce matin
Bon tuto !
Sylvain
7 juillet 2009 à 12:24
3Très content de découvrir ce tuto sur Zend. J’apprécie bcp ce blog, Clément, et je sais qu’on va en avoir pour notre argent
En revanche, petite question sur la base : la table « bureaux_photos» est elle réellement utile ? En effet, une photo ne concernant qu’un et un seul bureau, une relation de type 1,1/1,n (aaaah, Merise) semble suffisante. Le champ se « bureaux_id» se retrouve donc dans photos en tant que clé étrangère, et la table photos peut aussi porter le champ « principale» .
Et si cette table est réellement utile (j’ai peut être loupé qqchose dans la description de l’appli), pourquoi utiliser une clé primaire auto incrémentée, et pas une clé primaire composée des deux clés étrangères bureaux_id et photos_id ?
A moins que ce choix ne soit dû à une contrainte d’utilisation de l’ORM de Zend ?
Jo
7 juillet 2009 à 15:13
4Bonjour,
Les 2 premiers épisodes que tu viens de rédiger son vraiment simples à comprendre et intuitifs. Cependant je suis assez impatient de voir la suite. Vas-tu parler des mapper pour la relation avec la BDD ?
Une bonne chose serait de donner une petite indication sur ce que l’on va voir « dans le prochain épisode…» .
Jo.
Clément
7 juillet 2009 à 15:24
5@Jo: Merci beaucoup ! Oui dans le prochain épisode, je vous expliquerais les relations dans les models
Bonne idée du « dans le prochain épisode» je vais voir ça !
Ulyx
10 juillet 2009 à 10:59
6Tu dis :
Nous allons donc créer un fichier nommé Model_DbTable_Bureaux dans le répertoire models/DbTable/ de notre application.
le fichier model n’est pas plutot « Bureaux.php» qu’on met dans le repertoire « models/DbTable/ » et qui contient la classe « Model_DbTable_Bureaux»
Et si c’est le cas, par la suite, voudrais tu etre un peu plus rigoureux en ce qui concerne la description et les explications pour ne pas que des non initiés comme moi soient largués dans les prochains épisodes que je suppose être un peu plus complexe
cela dit l’association d’une application complète (zend/symfony) est une bonne initiative
Clément
10 juillet 2009 à 11:07
7@Ulyx: Autant pour moi ! Merci de me rapporter ce petit problème d’écriture . Et merci à toi de suivre cette série.
Promis, je vais faire des efforts pour vous fournir des tutos de qualités
Sylvain
10 juillet 2009 à 22:09
8Je réitère ma question
Est-ce que j’ai loupé un truc dans le conception et/ou dans le fonctionnel de l’appli, ou la structure choisie pour la table bureaux_photos est-elle due à des contraintes imposées par l’ORM de Zend ? Ou par celui de Symfony (et donc volonté de développer les deux tutos sur une même structure de base) ?
Clément
10 juillet 2009 à 23:44
9@Sylvain: Oups j’avais loupé de répondre à cette question !
C’est Djo de LaFerme qui m’a fourni la BDD, dc je pense à la contraintes de Symfony sans en être sur !
De toute manière je pense que c’est une bonne chose, comme ça nous allons voir comment récupérer les enregistrements à partir d’une table de liaison ! Ce qui est vraiment bien géré avec le Zend Framework !
leknoppix
10 août 2009 à 9:47
10Merci beaucoup, très bien expliquer.
Psykotik
20 août 2009 à 15:43
11Re-bonjour clément,
comme je l’ai dis dans le premier tuto, tu me reverra .
Et bien me revoilà, avec un petit souci, j’ai cette erreur
Fatal error: Class ‘Zend_Db_Table’ not found in C:\wamp\www\watchmydesk\application\models\DbTable\Bureau.php on line 3
J’ai une vague impression que le chemin du Framework ne fonctionne pas. J’ai toujours la même structure que ce matin
PS: il faut bien que ca arrive à qqn.
PS: J’ai ZF 1.9.1 ne serait-ce pas pour cette raison que cela ne fonctionne pas?
Psykotik
20 août 2009 à 16:09
12rectification j’ai un truc….
object(Zend_Db_Table_Rowset)#72 (10) { ["_data":protected]=> array(0) { } ["_table":protected]=> object(Model_DbTable_Bureaux)#48 (18) { ["_name":protected]=> string(7) « bureaux» ["_definition":protected]=> NULL ["_definitionConfigName":protected]=> NULL ["_db":protected]=> object(Zend_Db_Adapter_Mysqli)#20 (12) { ["_numericDataTypes":protected]=> array(16) { [0]=> int(0) [1]=> int(1) [2]=> int(2) ["INT"]=> int(0) ["INTEGER"]=> int(0) ["MEDIUMINT"]=> int(0) ["SMALLINT"]=> int(0) ["TINYINT"]=> int(0) ["BIGINT"]=> int(1) ["SERIAL"]=> int(1) ["DEC"]=> int(2) ["DECIMAL"]=> int(2) ["DOUBLE"]=> int(2) ["DOUBLE PRECISION"]=> int(2) ["FIXED"]=> int(2) ["FLOAT"]=> int(2) } ["_stmt":protected]=> object(Zend_Db_Statement_Mysqli)#62 (12) { ["_stmt":protected]=> object(mysqli_stmt)#63 (9) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(0) ["field_count"]=> int(8) ["errno"]=> int(0) ["error"]=> string(0) « » ["sqlstate"]=> string(5) « 00000″ ["id"]=> int(1) } ["_keys":protected]=> array(8) { [0]=> string(2) « id» [1]=> string(10) « membres_id» [2]=> string(5) « titre» [3]=> string(11) « description» [4]=> string(4) « note» [5]=> string(10) « classement» [6]=> string(4) « etat» [7]=> string(10) « date_ajout» } ["_values":protected]=> array(8) { [0]=> &NULL [1]=> &NULL [2]=> &NULL [3]=> &NULL [4]=> &NULL [5]=> &NULL [6]=> &NULL [7]=> &NULL } ["_meta":protected]=> object(mysqli_result)#64 (5) { ["current_field"]=> int(0) ["field_count"]=> int(8) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(1) }
ca suffit pour allez au prochain tuto?? ^^
Seb
24 septembre 2009 à 10:32
13Salut Clément,
J’ai décidé de me mettre a un framework et notamment a ZEND… et devine quoi ? tes tutos m’aident beaucoup donc juste pour dire MERCI !
Ps : C’est pas impossible que je te dise un « WHAT THE ~#{| ?» dans un prochain com’ mais pour le moment un très grand MERCI ! haha
Amicalement,
Seb.
armalex
3 octobre 2009 à 22:18
14Et la connexion à la base ? c’est ou?
Max
6 octobre 2009 à 13:35
15Heum,
joli tuto…
mais je bloque ici.
A l’étape 1, ça m’afficha bien « Vous êtes sur mon site» , mais là , après la #2, j’ai une page blanche.
A quoi c’est dû?
Merci
fred74
6 novembre 2009 à 17:24
16Salut,
excellent tuto. Mais j’ai juste un petit problème. Tout marche sauf quand je déclare la classe Model_Dbtable_Bureaux
j’ai ce message
Fatal error: Class ‘Model_DbTable_Bureaux’ not found in D:\data\PHP\tutoriel-zf\application\modules\frontend\controllers\IndexController.php
Merci
de ton aide
fred74
fabrice
8 décembre 2009 à 12:15
17j’ai une erreur lors de l’affiche de la page, après avoir exporté ton .sql dans mysql !
charly
23 février 2010 à 13:25
18je suis un debutant veuillez m’envoyer le code zend d’ajout, de suppression,modification
charly
23 février 2010 à 13:27
19j’ai besoin de document pour débutant en zend
Laisser un commentaire
Devenir Fan de Dator.fr
Nuage de tags
Sponsors
Blogs Amis
Derniers Posts
Derniers Commentaires
Les meilleurs sujets
Propulsé par WordPress