Home

(mysql, postgresql, sqlite, oracle, mssql?).

image

Contents

1. G n rer le premier module fonctionnel job Le module principal de l application Jobeet est bien videmment celui qui permet de cr er et de consulter des offres Le framework Symfony est capable de g n rer automatiquement un module fonctionnel complet pour un mod le donn Ce module int gre de base toutes les fonction nalit s de manipulation simples telles que l ajout la modification la sup pression et la consultation Ce travail est r alis l aide de la commande doctrine generate module comme le pr sente le code ci dessous php symfony doctrine generate module with show non verbose templates frontend job JobeetJob La t che doctrine generate module g n re un module job dans Pappli cation frontend pour le mod le JobeetJob Comme avec la plupart des t ches Symfony quelques fichiers et r pertoires ont t cr s Tous les fichiers du pr sent module ont t fabriqu s sous le r pertoire apps frontend modules job Composition de base d un module g n r par Symfony Le tableau ci apr s d crit les r pertoires de base qui ont t g n r s par Symfony l ex cution de la t che doctrine generate module dans le r pertoire apps frontend modules job 47 3 Concevoir le mod le de donn es Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine 48 Figure 3 2 Formulaire d dition d une offre d emploi Tableau 3 1 R pertoires du module apps frontend module
2. es Enfin le tout premier module fonctionnel de l application sera d velopp malgr le peu de code que nous aurons crire Installer la base de donn es Le framework Symfony supporte toutes les bases de donn es compati bles avec PDO MySQL PostgreSQL SQLite Oracle MSSQL PDO est la couche native d abstraction de bases de donn es de PHP Dans le cadre de ce projet c est MySQL qui a t choisi Cr er la base de donn es MySQL La premi re tape consiste bien videmment cr er une base de donn es locale dans laquelle seront sauvegard es et r cup r es les donn es de Jobeet Pour ce faire la commande mysqladmin suffit amplement mais un outil graphique comme PHPMyAdmin ou bien MySQL Query Browser fait aussi tr s bien l affaire mysqladmin uroot pmYsEcret create jobeet Le parti pris d utiliser MySQL pour Jobeet tient juste dans le fait que c est le plus connu et le plus accessible pour tous Un autre moteur de base de donn es aurait pu tre choisi la place dans la mesure o le code SQL sera automatiquement g n r par PORM C est ce dernier qui se pr occupe d crire les bonnes requ tes SQL pour le moteur de base de donn es install Configurer la base de donn es pour le projet Symfony Maintenant que la base de donn es est cr e il faut sp cifier Symfony sa configuration afin qu elle puisse tre reli e l application via lORM La commande configure database con
3. che doctrine data load Celle ci s occupe de r g n rer toute la base de donn es et les classes du mod le puis finit par charger les donn es initiales dans les tables php symfony doctrine build all reload Il suffit de lancer la commande doctrine build all reload puis de s assurer que tout a bien t g n r depuis le sch ma Cette t che g n re les classes de formulaires de filtres de mod le supprime la base de donn es existante et la recr e avec toutes les tables peupl es par les donn es initiales Profiter de toute la puissance de Symfony dans le navigateur Linterface en ligne de commande est plut t pratique mais n est malgr tout pas tr s attrayante qui plus est pour un projet web A ce stade d avancement du projet Jobeet est d ja pr t a accueillir les pages web dynamiques qui interagissent avec la base de donn es La suite du chapitre aborde les fonctionnalit s essentielles d affichage de la liste des offres demploi et d dition et de suppression d une offre existante Comme cela a d ja t expliqu au premier chapitre un projet Symfony est constitu d applications Chaque application est ensuite divis e en modules Un module est un ensemble autonome de code PHP qui repr sente une fonctionnalit de l application le module API par exemple ou bien un ensemble de manipulations que l utilisateur peut r aliser sur un objet du mod le un module d offres d emploi par exemple
4. com portement Timestampable permet de cr er et de fixer les valeurs des champs created_at et updated_at la vol e par Doctrine Si les tables de la base de donn es sont directement cr es gr ce aux requ tes SQL ou bien l aide d un diteur graphique le fichier de confi guration schema yml correspondant peut tre construit en ex cutant la t che doctrine build schema php symfony doctrine build schema FORMAT YAML pour la s rialisation des donn es D apr s le site officiel de YAML YAML est un standard de s rialisation des donn es facile utiliser pour un tre humain quel que soit le langage de programmation En d autres termes YAML est un langage simple pour d crire des donn es cha ne de carac teres entiers dates tableaux ou tableaux associatifs En YAML la structure est pr sent e gr ce l indentation Les listes d l ments sont identifi es par un tiret et les paires cl valeur d une section par une virgule YAML dispose galementd une syntaxe raccourcie pour d crire la m me structure en moins de lignes Les tableaux sont explici tement identifi s par des crochets et les tableaux associatifs avec des accolades Si vous n tes pas familier avec YAML c est le moment de commencer vous y int resser dans la mesure o le framework Symfony l emploie excessivement pour ses fichiers de configuration Il y a enfin une chose importante dont il faut absolument se souvenir lorsque
5. le fra mework Symfony Dans le cas pr sent la base de donn es ainsi que toutes les classes PHP du mod le de donn es ont t mises en place en un temps record Imaginez le temps qu il vous aurait fallu pour r aliser tout cela la main en partant de rien Toutefois il manque encore quelque chose d essentiel pour pouvoir se lancer pleinement dans le code et le d veloppement des fonctionnalit s de Jobeet Il s agit bien s r des donn es initiales qui permettent l appli cation de s initialiser et d tre test e La section suivante se consacre pleinement ce sujet Pr parer les donn es initiales de Jobeet Les tables ont t cr es dans la base de donn es mais celles ci sont tou jours vides Il faut donc pr parer quelques jeux de donn es pour remplir les tables de la base de donn es au fur et mesure de l avanc e du projet D couvrir les diff rents types de donn es d un projet Symfony Pour n importe quelle application il existe trois types de donn es 1 les donn es initiales ce sont les donn es dont a besoin l application pour fonctionner Par exemple Jobeet requiert quelques cat gories S il n y en a pas personne ne pourra soumettre d offre d emploi Un utilisateur administrateur capable de s authentifier l interface d administration backend en anglais est galement n cessaire 2 les donn es de test les donn es de test sont n cessaires pour tester l application et
6. options possibles donne la valeur par d faut de chacun d eux et donne quelques exemples prati ques d utilisation 41 3 Concevoir le mod le de donn es Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine 42 Les valeurs des colonnes d un enregistrement sont manipul es partir d un objet mod le en utilisant quelques accesseurs m thodes get et mutateurs m thodes set job new JobeetJob job gt setPosition Web developer job gt saveO echo job gt getPosition job gt delete Au vu de cette syntaxe il est vident que manipuler des objets plut t que des requ tes SQL devient la fois plus naturel plus ais mais aussi plus s curis puisque l chappement des donn es est laiss la charge de PORM Le mod le de donn es de Jobeet tablit une relation entre les offres d emploi et les cat gories Au moment de g n rer les classes du mod le de donn es Doctrine a devin les relations possibles entre les entit s et les a report es fid lement dans les classes PHP g n r es Ainsi un objet JobeetJob dis pose de m thodes pour d finir ou bien r cup rer l objet JobeetCategory qui lui est associ comme le pr sente l exemple de code ci dessous category new JobeetCategory category gt setName Programming job new JobeetJob job gt setCategory category Doctrine fonctionne bilat ralement c est dire que les liaison
7. D finir des jeux de donn es initiales pour Jobeet Chaque fois que Symfony cr e les tables dans la base de donn es toutes les donn es sont perdues Pour peupler la base de donn es avec des don n es initiales nous pourrions cr er un script PHP ou bien ex cuter quelques requ tes SQL avec le programme MySQL N anmoins comme ce besoin est relativement fr quent il existe une meilleure fa on de proc der avec Symfony Il s agit de cr er des fichiers YAML dans le r pertoire data fixtures puis d ex cuter la t che doctrine data 1oad pour les charger en base de donn es Les deux listings suivants de code YAML d finissent un jeu de donn es initiales pour l application Le premier fichier d clare les donn es pour remplir la table jobeet_category tandis que le second sert peupler la table des offres d emploi jobeet_job Contenu du fichier data fixtures categories yml JobeetCategory design name Design programming name Programming manager name Manager administrator name Administrator Contenu du fichier data fixtures jobs yml JobeetJob job_sensio_labs JobeetCategory programming type full time company Sensio Labs logo sensio labs gif url http www sensiolabs com position Web Developer location Paris France description You ve already developed websites with Symfony and you want to work with Open Source technologies You have a minimum of 3 years experience in web developmen
8. Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine Groupe Eyrolles 2009 ISBN 978 2 212 12494 1 EYROLLES oe id category_id type company logo url position r location Se description ae Seca tee is_active et blic created_at is_validated CategoryAffiliate email category_id expires_at affiliate_id created_at updated_at Concevoir le mod le de donn es MOTS CL S gt L ORM Doctrine gt Base de donn es La base de donn es est l un des piliers de toute application web gt Programmation orient e objet mais sa nature et sa structure peuvent rendre difficile son int gration dans le d veloppement de l application Heureusement Symfony en simplifie la manipulation gr ce la couche d ORM embarqu e Doctrine qui automatise la cr ation de la base de donn es partir d un sch ma de description et de quelques fichiers de donn es initiales Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine REMARQUE Parcimonie du code crit Symfony r alise une majeure partie du travail a la place du d veloppeur le module web ainsi cr sera enti rement fonctionnel sans que vous ayez crire beaucoup de code PHP 32 Ce troisi me chapitre se consacre principalement la base de donn es de Jobeet Les notions de mod le de donn es de couche d abstraction de bases de donn es de librairie d ORM ou bien encore de g n ration de code seront abord
9. cache du projet Symfony php symfony cache clear D autre part certains plug ins comme sfDoctrinePlugin embarquent des ressources suppl mentaires qui doivent tre accessibles depuis un navigateur web comme des images des feuilles de style ou bien encore des fichiers JavaScript Lorsqu un plug in est nouvellement install et activ l ex cution de la t che plugin publish assets cr e les liens sym boliques qui permettent de publier toutes les ressources web n cessaires php symfony plugin publish assets 35 3 Concevoir le mod le de donn es Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine 36 Figure 3 1 Diagramme entit relation de Jobeet Comme Propel n est pas utilis pour ce projet Jobeet le lien symbolique vers le r pertoire web sfPropelPlugin qui subsiste peut tre supprim en toute s curit rm web sfPropelPlugin Il est temps pr sent de s int resser l architecture de la base de don n es qui accueille toutes les donn es de Jobeet Concevoir le mod le de donn es Le chapitre pr c dent a d crit les cas d utilisation de l application Jobeet ainsi que tous les composants n cessaires les offres d emploi les affilia tions et les cat gories N anmoins cette d finition des besoins fonction nels n est pas suffisante Une transposition sous forme d un diagramme UML apporte plus de visibilit sur chaque objet et les relations qui les lient les
10. chier config doctrine schema yml contient une d finition au format YAML de tous les l ments qui composent la base de donn es Cette description indique la structure de chaque table et de ses champs respectifs les contraintes appliqu es sur chacun d eux ainsi que toutes les relations qui les lient les unes aux autres Le code suivant correspond au sch ma de d finition de la base de donn es de l application Jobeet 37 3 Concevoir le mod le de donn es Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine 38 Contenu du fichier config doctrine schema yml JobeetCategory actAs Timestampable columns name type string 255 notnull true unique true JobeetJob actAs Timestampable columns category_id type integer notnull true type type string 255 company type string 255 notnull true logo type string 255 url type string 255 position type string 255 notnull true location type string 255 notnull true description type string 4000 notnull true how_to_apply type string 4000 notnull true token type string 255 notnull true unique true is_public type boolean notnull true default 1 is_activated type boolean notnull true default O email type string 255 notnull true expires_at type timestamp notnull true relations JobeetCategory local category_id foreign id for
11. e la base de donn es les fichiers PHP du mod le de donn es ont t g n r s l aide de la t che doctrine build model Ces fichiers correspondent aux classes PHP qui transforment les enregistrements d une table en objets m tiers pour l application La t che doctrine build model construit les fichiers PHP dans le r per toire 1ib model doctrine qui permettent d interagir avec la base de donn es En parcourant ces derniers il est important de remarquer que Doctrine g n re trois classes par table Par exemple pour la table jobeet_job 1 JobeetJob un objet de cette classe repr sente un seul enregistrement de la table jobeet_job La classe est vide par d faut 2 BaseJobeetJob c est la superclasse de JobeetJob Chaque fois que lon ex cute la t che doctrine build model cette classe est r g n r e c est pourquoi toutes les personnalisations doivent tre crites dans la classe JobeetJob 3 JobeetJobTable la classe d finit des m thodes qui retournent prin cipalement des collections d objets JobeetJob Cette classe est vide par d faut Apropos Aide sur les t ches automatiques Comme n importe quel outil en ligne de commande les t ches automatiques de Symfony peuvent prendre des arguments et des options Chaque t che est livr e avec un manuel d utilisation qui peut tre affich gr ce la commande help php symfony help doctrine insert sql Le message d aide liste tous les arguments et
12. e les enregistrements d une table show Affiche les champs et les valeurs d un enregistrement donn new Affiche un formulaire pour cr er un nouvel enregistrement create Cr e un nouvel enregistrement edit Affiche un formulaire pour diter un enregistrement existant update Met jour les informations d un enregistrement d apr s les valeurs transmises par l utilisateur delete Supprime un enregistrement donn de la table Le module job est d sormais accessible et utilisable depuis un navigateur web l adresse suivante gt http jobeet localhost frontend_dev php job Comprendre l importance de la m thode magique __toString Si l on tente d diter une offre d emploi on remarque que la liste d rou lante Category id est une s lection de l ensemble des cat gories pr sentes dans la base de donn es La valeur de chaque option est obtenue gr ce la m thode __toStringQ Doctrine essaye d appeler nativement une m thode __toString en devinant un nom de colonne descriptif tel que title name subject etc Si l on d sire quelque chose de plus personnalis il est alors n cessaire de red finir la m thode __toString comme le pr sente le listing ci apr s Le mod le JobeetCategory est capable de deviner la m thode __toString en utilisant la colonne name de la table jobeet_category Listing du fichier lib model doctrine JobeetJob class php class JobeetJob extends BaseJobeetJob
13. eignAlias JobeetJobs JobeetAffiliate actAs Timestampable columns url type string 255 notnull true email type string 255 notnull true unique true token type string 255 notnull true is_active type boolean notnull true default O relations JobeetCategories class JobeetCategory refClass JobeetCategoryAffiliate local affiliate_id foreign category_id foreignAlias JobeetAffiliates JobeetCategoryAffiliate columns category_id type integer primary true affiliate_id type integer primary true relations JobeetCategory onDelete CASCADE local category_id foreign id JobeetAffiliate onDelete CASCADE local affiliate_id foreign id Le sch ma est la traduction directe en format YAML du diagramme entit relation On identifie ici clairement quatre entit s dans ce mod le JobeetCategory JobeetJob JobeetAffiliate et JobeetCategoryAffiliate Les relations entre les objets JobeetCategory et JobeetJob d couvertes plus haut sont bien retranscrites au m me titre que celles entre JobeetCategory et JobeetAffiliate via la quatri me entit JobeetCategoryAffiliate De plus ce mod le d finit des comportements pour certaines entit s gr ce la section actAs Les comportements behaviors en anglais sont des outils internes de Doctrine qui permettent d automatiser des traite ments sur les donn es lorsqu elles sont crites dans la base Ici le
14. es qui sont dans la plupart des cas auto incr ment es et qui varient perp tuellement La cat gorie de P offre d emploi job_sensio_labs est programming ce qui correspond la cat gorie nomm e Programming Dans un fichier YAML lorsqu une cha ne de caract res contient des retours la ligne comme la colonne description dans les donn es ini tiales du fichier d offres d emploi la barre verticale pipe en anglais sert indiquer que la cha ne occupera plusieurs lignes REMARQUE T l charger les images relatives aux donn es initiales Le fichier de donn es initiales des offres r f rence deux images Vous pouvez les t l charger gt http Awww symfony project org get jobeet sensio labs gif gt http Awww symfony project org get jobeet extreme sensio gif Vous devrez ensuite les placer dans le r pertoire uploads jobs 45 3 Concevoir le mod le de donn es Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine ASTUCE Propel versus Doctrine Propel a besoin que les fichiers de donn es de test soient pr fix s par des nombres pour d ter miner dans quel ordre les fichiers doivent tre charg s Avec Doctrine ce n est pas n cessaire puisque toutes les donn es sont charg es et sau vegard es dans le bon ordre pour s assurer que les cl s trang res sont d finies correctement 46 Bien qu un fichier de donn es contienne des objets provenant d un ou de pl
15. figure Symfony pour fonctionner avec la base de donn es php symfony configure database name doctrine class sfDoctrineDatabase mysql host localhost dbname jobeet root mYsEcret Apr s avoir configur la connexion 4 la base de donn es toutes les con nexions qui r f rencent Propel dans le fichier config databases ym1 doivent tre supprim es manuellement Le fichier de configuration de la base de donn es doit finalement ressembler celui ci all doctrine class sfDoctrineDatabase param dsn mysql host localhost dbname jobeet username root password mYsEcret La t che configure database accepte trois arguments le DSN Data Set Name lien vers la base de donn es PDO le nom d utilisateur et le mot de passe permettant d acc der la base de donn es Si aucun mot de passe n est requis pour acc der a la base de donn es du serveur de d ve loppement le troisi me argument peut tre omis Pr sentation de la couche d ORM Doctrine Symfony fournit de base deux biblioth ques d ORM Open Source pour interagir avec les bases de donn es Propel et Doctrine agissant toutes deux comme des couches d abstraction Cependant cet ouvrage ne s int resse qu l utilisation de Symfony avec ORM Doctrine CHOIX DE CONCEPTION Pourquoi Doctrine plut t que Propel Le choix de la librairie Doctrine par rapport Propel s impose de lui m me pour plusieurs rai sons Bien que la librairie Propel soit aujo
16. l on dite un fichier YAML l indentation doit toujours tre compos e d un ou de plusieurs espaces mais jamais de tabulations D claration des attributs des colonnes d une table en format YAML Le fichier schema yml contient la description de toutes les tables et de leurs colonnes Chaque colonne est d crite au moyen des attributs suivants 1 type le type de la colonne float decimal string array object blob clob timestamp time date enum gzip 2 notnull plac la valeur true cet attribut rend la colonne obligatoire 39 3 Concevoir le mod le de donn es Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine PROPOS Comportements support s par Doctrine L attribut onDelete d termine le comportement ON DELETE des cl s trang res Doctrine sup porte les comportements CASCADE SET NULL et RESTRICT Par exemple lorsqu un enregistre ment de la table job est supprim tous les enre gistrements associ s la table jobeet_category_affiliate seront automatiquement effac s de la base de donn es 40 3 unique plac la valeur true l attribut unique cr e automatique ment un index d unicit sur la colonne La base de donn es existe et est configur e pour fonctionner avec Sym fony et le sch ma de description de cette derni re est d sormais crit N anmoins la base de donn es est toujours vierge et rien ne permet pour le moment de la manipuler La partie
17. ncore Symfony facilite grandement le travail du d veloppeur gr ce la t che automa tique doctrine build sq1 qu il suffit d ex cuter php symfony doctrine build sql La t che doctrine build sq1 cr e les requ tes SQL dans le r pertoire data sql optimis es pour le moteur de base de donn es configur Echantillon de code du fichier data sql schema sql CREATE TABLE jobeet_category id BIGINT AUTO_INCREMENT name VARCHAR 255 NOT NULL COMMENT test created_at DATETIME updated_at DATETIME slug VARCHAR 255 UNIQUE INDEX sluggable_idx slug PRIMARY KEY id ENGINE INNODB Enfin il ne reste plus que la derni re tape franchir Il s agit de cr er physiquement toutes les tables dans la base de donn es Une fois de plus c est un jeu d enfant gr ce aux t ches automatiques fournies par le fra mework Le plug in sfDoctrinePlugin comporte une t che doctrine insert sq1 qui se charge d ex cuter le script SQL g n r pr c demment pour monter toute la base de donn es php symfony doctrine insert sql a y est la base de donn es est pr te accueillir des informations Toutes les tables ont t cr es ainsi que les contraintes d int grit r f rentielle qui lient les enregistrements des tables entre eux Il est d sor mais temps de s int resser aux classes du mod le qui ont t g n r es D couvrir les classes du mod le de donn es A la premi re tape de construction d
18. nn es dans le fichier de configuration config databases yml Au lieu d utiliser cette t che le fichier peut tre dit manuellement 33 3 Concevoir le mod le de donn es Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine 34 Qu est ce qu une couche d abstraction de base de donn es Une couche d abstraction de bases de donn es est une interface logicielle qui permet de rendre ind pendant le syst me de gestion de base de don n es de l application Ainsi une application fonctionnant sur un syst me de base de donn es relationnel SGBDR comme MySQL doit pou voir fonctionner de la m me mani re avec un syst me de base de don n es diff rent Oracle par exemple sans avoir modifier son code fonctionnel Une simple ligne de configuration dans un fichier doit suf fire indiquer que le gestionnaire de base de donn es n est plus le m me Depuis la version 5 1 0 PHP dispose de sa propre couche d acc s aux bases de donn es PDO PDO est l abr viation pour PHP Data Objects Il s agit en fait surtout d une interface commune d acc s aux bases de donn es plus qu une v ritable couche d abstraction En effet avec PDO il est n cessaire d crire soi m me les requ tes SQL pour interroger la base de donn es laquelle l application est connect e Or les requ tes sont largement d pendantes du syst me de base de donn es bien que SQL soit un langage standa
19. ns de code PHP signifie aussi moins de risques d y trouver un bug Un moyen simple de progresser avant de passer au chapitre suivant est de prendre la peine de lire le code g n r pour le module et le mod le et essayer d en comprendre le fonctionnement Le chapitre qui suit aborde l un des plus importants paradigmes utilis s dans les frameworks web le patron de conception MVC Le code complet du chapitre est disponible dans le d p t SVN de Jobeet au tag release_day_03 svn co http svn jobeet org doctrine tags release_day_03 jobeet 51 3 Concevoir le mod le de donn es
20. pour s assurer qu elle se comporte comme les cas d utili sation fonctionnels le sp cifient Bien videmment le meilleur moyen de le v rifier est d crire des s ries de tests automatis s c est pourquoi des tests unitaires et fonctionnels seront d velopp s pour Jobeet Ainsi chaque fois que les tests seront ex cut s une base de donn es saine constitu e de donn es fra ches et pr tes tre test es sera n cessaire ASTUCE Comprendre la syntaxe des t ches automatiques de Symfony Une t che Symfony est constitu e d un espace de nom namespace pour les puristes et d un nom Chacun d eux peut tre raccourci tant qu il n y a pas d ambiguit avec d autres t ches Ainsi les commandes suivantes sont quivalentes a cache clear php symfony cache cl php symfony ca c Comme la t che cache clear est fr quem ment utilis e elle poss de une autre abr viation encore plus courte php symfony cc 43 3 Concevoir le mod le de donn es Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine 44 3 Zes donn es utilisateur les donn es utilisateur sont cr es par les utili sateurs au cours du cycle de vie normal de l application Pour le moment Jobeet requiert quelques donn es initiales pour initia liser l application Symfony fournit un moyen simple et efficace de d finir ce type de donn es l aide de fichiers YAML comme l explique la partie suivante
21. public function __toString return sprintf s at s s this gt getPosition this gt getCompany this gt getLocation 49 3 Concevoir le mod le de donn es Symfony Mieux d velopper en PHP avec Symfony 1 2 et Doctrine Figure 3 3 Contr le de saisie basique dans le formulaire de cr ation d une offre d emploi 50 Listing du fichier lib model doctrine JobeetAffiliate class php class JobeetAffiliate extends BaseJobeetAffiliate public function __toString O return this gt getUr10 Ajouter et diter les offres d emploi Les offres demploi sont pr sent pr tes tre ajout es et dit es Si un champ obligatoire est laiss vide ou bien si sa valeur est incorrecte une date invalide par exemple le processus de validation du formulaire pro voquera une erreur emp chant alors la mise jour de l enregistrement Symfony cr e effectivement les r gles de validation basiques en intros pectant le sch ma de la base de donn es Token e Required Is public m Is activated B Email e Required Expires at Required CSC CE CRG Created at CSC CS CRG Tindated at CC a ma Ca En r sum C est tout pour ce troisi me chapitre L introduction tait tr s claire En effet peu de code PHP a t crit mais Jobeet dispose d j d un module d offres d emploi enti rement fonctionnel et pr t tre am lior et per sonnalis Souvenez vous moi
22. rd et normalis Chaque SGBDR propose en r alit ses propres fonctionnalit s et donc sa propre version enrichie de SQL pour interroger la base de donn es Doctrine s appuie sur l extension PDO pour tout ce qui concerne la con nexion et l interrogation des bases de donn es requ tes pr par es tran sactions ensembles de r sultats En revanche PAPI se charge de convertir les requ tes SQL pour le syst me de gestion de base de don n es actif ce qui en fait une v ritable couche d abstraction La librairie Doctrine supporte toutes les bases de donn es compatibles avec PDO telles que MySQL PostgreSQL SQLite Oracle MSSQL Sybase IBM DB2 IBM Informix Qu est ce qu un ORM ORM est le sigle de Object Relational Mapping ou Mapping Objet Relationnel en fran ais Une couche d ORM est une interface logicielle qui permet de repr senter et de manipuler sous forme d objet tous les l ments qui composent une base de donn es relationnelle Ainsi une table ou bien un enregistrement de celle ci est per u comme un objet du langage sur lequel il est possible d appliquer des actions les m thodes L avantage de cette approche est de s abstraire compl tement de la technologie de gestion de la base de donn es qui fonctionne en arri re plan et de ne travailler qu avec des objets ayant des liaisons entre eux A partir d un mod le de donn es d fini plus loin dans ce chapitre Doc trine cons
23. re stock es dans la base de donn es relationnelle install e plus haut Symfony est un framework qui a la particularit d tre enti rement orient Objet ce qui permet au d veloppeur de manipuler des objets aussi souvent que pos sible Par exemple au lieu d crire des requ tes SQL pour retrouver des enregistrements de la base de donn es il sera plus naturel et logique de manipuler des objets Dans Symfony les informations de la base de donn es relationnelle sont repr sent es mapp es en langage informatique en un mod le objet La g n ration et la gestion de mod les objets sont enti rement laiss es la charge de PORM Doctrine Pour ce faire Doctrine a besoin d une description des tables et de leurs relations pour cr er toutes les classes correspondantes Il existe deux mani res pour tablir ce sch ma de des cription La premi re consiste analyser une base de donn es existante par r tro ing nierie reverse engineering pour les puristes ou bien en le cr ant manuellement crire le sch ma de d finition de la base de donn es Comme la base de donn es n existe pas encore et que nous souhaitons la garder agnostique le sch ma de d finition de la base de donn es doit tre crit la main dans le fichier config doctrine schema ym1 Le r pertoire 22 N config doctrine n existe pas encore il doit tre cr la main mkdir config doctrine touch config doctrine schema yml Le fi
24. s entre les objets sont g r es aussi bien d un c t que d un autre La classe JobeetJob poss de des m thodes pour agir sur l objet JobeetCategory qui lui est associ mais la classe JobeetCategory poss de elle aussi des m thodes pour d finir les objets JobeetJob qui lui appartiennent G n rer la base de donn es et le mod le en une seule passe La t che doctrine build a11 est un raccourci pour les t ches ex cut es dans cette section et bien d autres Il est temps maintenant de g n rer les formulaires et les validateurs pour les classes de mod le de Jobeet php symfony doctrine build all no confirmation Les validateurs seront pr sent s 4 la fin de ce chapitre tandis que les for mulaires seront expliqu s en d tail au cours du chapitre 10 Symfony charge automatiquement les classes PHP 4 la place du d ve loppeur ce qui signifie que nul appel require nest requis dans le code C est l une des innombrables fonctionnalit s que le framework automa tise bien que cela entra ne un l ger inconv nient En effet chaque fois qu une nouvelle classe est ajout e au projet le cache de Symfony doit tre vid La t che doctrine bui1d model a g n r un certain nombre de nouvelles classes c est pourquoi le cache doit tre r initialis php symfony cache clear Le d veloppement d un projet est fortement acc l r gr ce aux nom breux composants et t ches automatiques que fournit nativement
25. s job R pertoire Description actions Les actions du module templates Les templates du module Le r pertoire actions contient la classe dans laquelle se trouvent toutes les actions CRUD create retrieve update et delete de base qui permet tent de manipuler une offre d emploi A toutes ces actions est associ un ensemble de fichiers de templates g n r s dans le r pertoire templates D couvrir les actions du module job Le fichier actions actions class php d finit toutes les actions possibles pour le module job C est exactement ce que d crit le tableau 3 2 Edit Job Category id Programming Type full time Company Sensio Labs Logo sensio_labs png Url http www sensiolabs com Position Web Developer Location Paris France You ve already developed Description want to work with Open Source technologies You have a 8 y a P t a H t gt n Fh g ie 5 a Me g 4 gt B Send your resume to How to apply Token job_sensio_labs Is public M Is activated M Email job example com Expires at 10 10 b 2010 WA 00 FA Created at 01 BY 13 Y 2009 WA 09 b Updated at 01 j 13 Y 2009 H 09 b Cancel Delete Save 00 F 07 FA 07 FA Tableau 3 2 Liste des actions du fichier apps frontend modules job actions actions class php Nom de l action Description index Affich
26. suivante couvre ces probl matiques en pr sentant comment l ORM Doctrine g n re tout le n ces saire pour rendre la base de donn es op rationnelle G n rer la base de donn es et les classes du modele avec Doctrine Grace a la description de la base de donn es pr sente dans le fichier config doctrine schema ym1 Doctrine est capable de g n rer les ordres SQL n cessaires pour cr er les tables de la base de donn es ainsi que toutes les classes PHP qui permettent de l attaquer au travers d objets m tiers Construire la base de donn es automatiquement La construction de la base de donn es est r alis e en trois temps la g n ration des classes du mod le de donn es puis la g n ration du fichier contenant toutes les requ tes SQL ex cuter et enfin l ex cution de ce dernier pour cr er physiquement toutes les tables La premi re tape consiste tout d abord g n rer le mod le de donn es autrement dit les classes PHP relatives chaque table et enregistrement de la base de donn es php symfony doctrine build model Cette commande g n re un ensemble de fichiers PHP dans le r pertoire lib model doctrine qui correspondent une entit du sch ma de d fi nition de la base de donn es Lorsque toutes les classes du mod le de donn es sont pr tes l tape sui vante doit permettre de g n rer tous les scripts SQL qui cr ent physi quement les tables dans la base de donn es Cette fois e
27. t with PHP or Java and you wish to participate to development of Web 2 0 sites using the best frameworks available how_to_apply Send your resume to fabien potencier at sensio com is_public true is_activated true token job_sensio_labs email job example com expires_at 2010 10 10 job_extreme_sensio JobeetCategory design type part time company Extreme Sensio logo extreme sensio gif url http www extreme sensio com position Web Designer location Paris France description Lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Duis aute irure dolor in reprehenderit in Voluptate velit esse cillum dolore eu fugiat nulla pariatur Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est laborum how_to_apply Send your resume to fabien potencier at sensio com is_public true is_activated true token job_extreme_sensio email job example com expires_at 2010 10 10 Un fichier de donn es est crit au format YAML et d crit les objets mod les r f renc s par un nom unique Par exemple les deux offres d emploi sont intitul es job_sensio_labs et job_extreme_sensio Cet intitul sert lier les objets entre eux sans avoir exprimer explicitement les cl s primair
28. truit enti rement la base de donn es pour le SGBDR choisi ainsi que les classes permettant d interroger la base de donn es au travers d objets Grace aux relations qui lient les tables entre elles Doctrine est par exemple capable de retrouver tous les enregistrements d une table qui d pendent d un autre dans une seconde table Activer ORM Doctrine pour Symfony Les deux ORMs du framework Propel et Doctrine sont tous deux fournis nativement sous forme de plug ins internes A ce jour Propel est encore la couche d ORM activ e par d faut dans la configuration d un projet Symfony Il faut donc commencer par le d sactiver puis activer le plug in sfDoctrinePlugin qui contient toute la biblioth que Doctrine La manipulation est triviale puisqu elle ne n cessite qu une unique modification dans le fichier de configuration g n rale du projet config ProjectConfiguration class php comme le montre le code suivant public function setup this gt enablePlugins array sfDoctrinePlugin this gt disablePlugins array sfPropelPlugin Le m me r sultat peut galement tre obtenu en une seule ligne de code Le listing ci dessous active par d faut tous les plug ins du projet hormis ceux sp cifi s dans le tableau pass en param tre public function setup this gt enableA11PluginsExcept array sfPropelPlugin sfCompat10Plugin Lune ou l autre de ces deux op rations n cessite de vider le
29. uns aux autres D couvrir le diagramme UML entit relation D apr s l tude des besoins fonctionnels de Jobeet on d termine claire ment les diff rentes relations suivantes e une offre demploi est associ e une cat gorie une cat gorie a entre 0 et N offres demploi associ es e une affiliation poss de entre 1 et N cat gories une cat gorie a entre 0 et N affiliations Il en r sulte presque naturellement le mod le entit relation suivant id category_id type company logo url position location description how_to_apply token is_public is_validated email expires_at created_at updated_at if I is_active 1 created_at CategoryAffiliate category_id affiliate _id Ce diagramme d crit galement les diff rentes propri t s de chaque objet qui deviendront les noms des colonnes de chaque table de la base de donn es Un champ created_at a t ajout quelques tables Sym fony reconnait ce type de champ et fixe sa valeur avec la date courante du serveur lorsqu un enregistrement est cr Il en va de m me pour les champs updated_at leur valeur est d finie partir de la date courante du serveur lorsque l enregistrement est mis jour dans la table Mise en place du sch ma de d finition de la base De l importance du sch ma de d finition de la base de donn es Les offres d emploi les affiliations et les cat gories doivent t
30. urd hui mature il n en r sulte pas moins que son ge lui fait d faut En effet ce projet Open Source rendit bien des services aux d veloppeurs jusqu aujourd hui mais malheureusement son support et sa communaut ne sont plus aussi actifs qu auparavant Propel est clairement sur le point de mourir laissant place des outils plus r cents comme Doctrine La librairie Doctrine dispose de plusieurs atouts par rapport Propel tels qu une API simple et fluide pour d finir des requ tes SQL de meilleures performances avec les requ tes complexes la gestion native des migrations la validation des donn es l h ritage de tables ou bien encore le support de diff rents comportements utiles sluggification ensembles imbriqu s sup pressions virtuelles recherches De surcro t le projet Doctrine jouit aujourd hui d une communaut toujours plus active et d une documentation abondante D ailleurs l heure o nous crivons ces lignes un livre contenant toute la documentation technique de Doctrine est en pr paration Enfin le projet Doctrine est support par Sensio Labs soci t ditrice du framework Symfony Le d veloppeur principal du projet Doctrine Jonathan Wage a rejoint l quipe de production de la soci t en 2008 pour se consacrer davantage au d veloppement et l int gration de Doctrine dans Symfony REMARQUE Fichier databases yml La t che configure database stocke la configuration de la base de do
31. usieurs mod les il est vivement recommand de ne cr er qu un seul fichier par mod le Dans un fichier de donn es il n est nul besoin de d finir toutes les valeurs des colonnes Si certaines valeurs ne sont pas d finies Symfony utilisera la valeur par d faut d finie dans le sch ma de la base de don n es Comme Symfony utilise Doctrine pour charger les donn es en base de donn es tous les comportements natifs comme la fixation auto matique des colonnes created_at et updated_at et les comportements personnalis s ajout s aux classes de mod le sont activ s Charger les jeux de donn es de tests en base de donn es Une fois les fichiers de donn es initiales cr s leur chargement en base de donn es est aussi simple que de lancer une t che automatique Le plug in sfDoctrinePlugin poss de la commande doctrine data 1oad qui se charge d enregistrer toutes ces donn es dans la base de donn es php symfony doctrine data load Ex cuter l une apr s l autre toutes les t ches pour r g n rer la base de donn es construire les classes du mod le et ins rer les donn es initiales peut se r v ler tr s vite fastidieux Symfony propose une t che simple qui r alise toutes ces op rations en une seule passe comme l explique la section suivante R g n rer la base de donn es et le mod le en une seule passe La t che doctrine build all reload est un raccourci pour la t che doctrine build a11 suivi de la t

Download Pdf Manuals

image

Related Search

Related Contents

My Passport Wireless User Manual  User Manual Doc. n. 02490-0-B  be.ez LE vertigo 17  HOOD TYPE DISHWASHER WD-7 Installation and user manual  SPEEDLINK MACE 2.1 Subwoofer System  Sony KDL-40E5520E 40" Full HD White LCD TV  7. Parts catalog  ブラシンキラップ粉剤DL  lámpara de emergencia estimado cliente características  Projector Lamp  

Copyright © All rights reserved.
Failed to retrieve file