Upload
martin-brait
View
47
Download
0
Embed Size (px)
Citation preview
Programmez intelligent
Zend FrameworkEn imposant des rgles strictes de gestion de code et en offrant une trsriche bibliothque de composants prts lemploi, le framework PHP 5 ZendFramework guide le dveloppeur web dans lindustrialisation de ses dvelop-pements, afin den garantir la fiabilit, lvolutivit et la facilit de maintenance.
Cet ouvrage prsente les meilleures pratiques de dveloppement web avecPHP 5 et le Zend Framework : design patterns, MVC, base de donnes, scu-rit, interoprabilit, tests unitaires, gestion des flux et des sessions, etc.Non sans rappeler les prrequis techniques et thoriques lutilisation du fra-mework, louvrage aidera tant les dveloppeurs dbutants en PHP que leschefs de projets ou architectes aguerris souhaitant lutiliser en entreprise.
39
978
2212
1239
20
avec les Cahiersdu Programmeur
Con
cept
ion
couv
ertu
re:
Nor
dcom
po
Architecte certifi PHP et ZendFramework, Julien Pauli estresponsable du ple Zend Frame-work/PHP chez Anaska (groupeAlter Way). Contributeur de la pre-mire heure au framework en colla-boration avec Zend Technologies,confrencier et membre de lAFUP,il publie des articles sur PHP dans lapresse.
Fondateur et grant de la socitOpenStates (partenaire ZendT e c h n o l o g i e s e t A n a s k a ) ,Guillaume Ponon intervientdepuis plus de sept ans auprs degrands comptes sur de nom-breuses missions dexpertise, deconseil et de formation PHP. Ing-nieur EPITA, expert certifi PHP etZend Framework, il est aussi sp-cialiste des systmes Unix/Linux etpratique Java et C/C++. Trs im-pliqu dans la communaut PHP,avec la prsidence de lAFUP en2007-2008 et la cration de laWeb TV PHPTV, il est lauteur delouvrage Best practices PHP 5 etcoauteur du Mmento PHP et SQLaux ditions Eyrolles.
SommaireZend Framework Inconvnients et avantages Structure et principes Conseilspour dmarrer Cahier des charges Une application de rservations de salles Spcifications fonctionnelles et techniques Conventions Installation et prise enmain Tlchargement et configuration Composants de base Chargement desclasses Gestion des messages Dbogage Exceptions Registre Bases de don-nes SGBD compatibles PDO Excution de requtes Passerelles et modlesde donnes Performances et scurit des donnes tendre Zend_Db MVC : pre-mire approche Parcours de la requte Crer une vue Crer un gabarit gn-ral MVC avanc Les objets de MVC Routage Dispatching Plugins Aides devues et daction Distributeur Configuration Sessions Le composant session Espaces de noms Authentification Adaptateurs Listes de contrle daccs Ressources et rles des ACL Internationalisation Gestion de la locale Multilinguisme Gettext/TMX Monnaies Dates Performances Cache APC Gestion de la mmoire Compilation Scurit Validateurs Filtres Attaques cou-rantes et parades Interoprabilit REST SOAP Flux de donnes Autres com-posants E-mails PDF Formulaires Outils et mthodologie Zend Studio pourEclipse (IDE) Dbogage Profilage Tests Utilisation avance Crer et driverdes composants Intgration Annexes Ce quest un framework Rappel sur lesbases de donnes Programmation oriente objet Motifs de conception (design pat-terns) MVC PHP Subversion PHPUnit.
Julien PauliGuillaume Ponon
Bien dvelopper en PHP
Prface de Wil Sinclair
les Cahiersdu ProgrammeurJ. Pa
uli
G.
Pon
on
Zend
Fram
ewor
k
Cod
e d
iteur
: G
12392
ISB
N:
97
8-2
-21
2-1
23
92
-0
_ _ g
les Cahiersdu Programmeur
ZendFramework
PDT_12392_ZEND 30/10/08 9:23 Page 1
Collection Les cahiers du programmeur
P. Roques. UML 2. Modliser une application web. N12389, 6e dition, 2008, 247 pages
A. GoncAlves. Java EE 5. N12363, 2e dition, 2008, 370 pages
e. PuybARet. Swing. N12019, 2007, 500 pages
e. PuybARet. Java 1.4 et 5.0. N11916, 3e dition, 2006, 400 pages
J. MoliRe. J2EE. N11574, 2e dition, 2005, 220 pages
R. FleuRy Java/XML. N11316, 2004, 218 pages
J. PRotzenko, B. PicAud. XUL. N11675, 2005, 320 pages
S. MARiel. PHP 5. N11234, 2004, 290 pages
Chez le mme diteur
e. dAsPet, c. PieRRe de GeyeR. PHP 5 avanc. N12369, 5e dition, 2008, 844 pages
J.-M. deFRAnce. Premires applications Web 2.0 avec Ajax et PHP. N12090, 2008, 450 pages
d. seGuy, P. GAMAche. Scurit PHP 5 et MySQL. N12114, 2007, 250 pages
c. PoRteneuve Bien dvelopper pour le Web 2.0. Bonnes pratiques Ajax. N12391, 2e dition, 2008, 674 pages
A. boucheR. Mmento Ergonomie web. N12386, 2008, 14 pages
V. MessAGeR-RotA. Gestion de projet. Vers les mthodes agiles. N12165, 2007, 252 pages
H. beRsini, i. Wellesz. Lorient objet. N12084, 3e dition, 2007, 600 pages
P. Roques. UML 2 par la pratique. N12322, 6e dition, 368 pages
s. boRdAGe. Conduite de projet Web. N12325, 5e dition, 2008, 394 pages
k. dJAAFAR. Dveloppement JEE 5 avec Eclipse Europa. N12061, 2008, 380 pages
J. Dubois, J.-P. RetAill, T. TeMPlieR. Spring par la pratique. Java/J2EE, Spring, Hibernate, Struts, Ajax. n11710, 2006, 518 pages t. ziAd. Programmation Python. N11677, 2006, 530 pages
Du mme auteur
G. Ponon. Best practices PHP 5. Les meilleures pratiques de dveloppement en PHP. N11676, 2005, 470 pages
c. PieRRe de GeyeR, G. Ponon. Mmento PHP et SQL. N11785, 2006, 14 pages
Collection Accs libre
Pour que linformatique soit un outil, pas un ennemi !
Joomla et Virtuemart Russir sa boutique en ligne. V. isAksen, T. tARdiF. N12381, 2008, 270 pages
Open ERP Pour une gestion dentreprise efficace et intgre. F. PinckAeRs, G. GARdineR. N12261, 2008, 276 pages
Russir son site web avec XHTML et CSS. M. nebRA. N12307, 2e dition, 2008, 316 pages
Ergonomie web. Pour des sites web efficaces. A. boucheR. N12158, 2007, 426 pages
Gimp 2 efficace Dessin et retouche photo. c. GMy. N12152, 2e dition, 2008, 402 pages
La 3D libre avec Blender. o. sARAJA. N12385, 3e dition, 2008, 400 pages avec CD-Rom et cahier couleur ( paratre).
Scenari La chane ditoriale libre. s. cRozAt. N12150, 2007, 200 pages
Crer son site e-commerce avec osCommerce. d. MeRceR, adapt par s. buRRiel. N11932, 2007, 460 pages
Russir un site web dassociation avec des outils libres. A.-l. et d. quAtRAvAux. N12000, 2e dition, 2007, 372 pages
Ubuntu efficace.. L. dRicot et al. N12003, 2e dition, 2007, 360 pages avec CD-Rom
Russir un projet de site Web. n. chu. N12400, 5e dition, 2008, 230 pages
les Cahiersdu Programmeur
ZendFramework
Julien Pauli
Guillaume Ponon
Prface de Wil Sinclair
Bien dvelopper en PHP
PDT_12392_ZEND 30/10/08 9:24 Page 3
DITIONS EYROLLES61, bd Saint-Germain75240 Paris Cedex 05
www.editions-eyrolles.com
Le code de la proprit intellectuelle du 1er juillet 1992 interdit en effet expressment la photocopie usage collectif sans autorisation des ayants droit. Or, cette pratique sest gnralise notamment dans les tablissements denseignement, provoquant une baisse brutale des achats de livres, au point que la possibilit mme pour les auteurs de crer des uvres nouvelles et de les faire diter correctement est aujourdhui menace.En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le prsent ouvrage, sur quelque support que ce soit, sans autorisation de lditeur ou du Centre Franais dExploitation du Droit de Copie, 20,
rue des Grands-Augustins, 75006 Paris. Groupe Eyrolles, 2009, ISBN : 978-2-212-12392-0
Dessins douverture des chapitres : Guillaume Ponon.
Groupe Eyrolles, 2008
Lors de la premire confrence Zend/PHP en 2005, la socit ZendTechnologies a prsent le Zend Framework comme tant un lmentcl et dcisif dans le projet de la communaut PHP. cette poque,PHP tait connu pour tre la seule solution de dveloppement web com-binant puissance et simplicit de mise en uvre. Cependant, nombre dedveloppeurs saperurent que leurs simples scripts PHP, qui traitaient la fois laccs des bases de donnes, la logique mtier et laffichage, nepouvaient tenir la dure face la complexit croissante des applicationsweb modernes. Est alors devenue vidente la ncessit de structurer lesapplications pour les rendre plus faciles maintenir et tirer parti dupotentiel de PHP 5.
Le Zend Framework a certainement beaucoup contribu lorganisationet la structuration des applications PHP 5, tout en ayant rsoludautres problmes inhrents au dveloppement web. Il fournit des com-posants dutilisation courante qui sont tests (les tests couvrent au moins80 % de lensemble du code) de manire ce que les dveloppeurs PHPne rinventent pas la roue chaque nouvelle application. En outre, lesstandards de codage quil met en uvre amliorent et facilitent la gestiondes projets engageant des quipes entires de dveloppeurs. Plus impor-tant encore, utiliser le Zend Framework encourage les bonnes pratiquesde dveloppement PHP, puisque lui-mme les met en application. Nousincitons ainsi les dveloppeurs amliorer leur code en leur apportant ceque nous pensons tre des fondations solides, crites proprement.
Au fil des annes, le Zend Framework sest enrichi de nombreux compo-sants, a vu exploser le nombre de ses contributeurs et utilisateurs ainsique le nombre de ses dploiements, au point quil est devenu le fra-mework leader pour les projets PHP des plus modestes aux plus ambi-
Prface
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 2008VI
tieux, quils soient mens par des amateurs ou par les plus grandscomptes. Utilis partout dans le monde, on le trouve au cur dapplica-tions aux usages aussi divers que le recensement des gnocides enAfrique ou llevage danimaux virtuels en ligne. Nous sommes trs fiersde constater que de tels projets aient pu voir le jour grce cet outil puis-sant et polyvalent. Et de fait, nous nous plaisons croire que lexistencedu Zend Framework a jou un rle dans ladoption massive de technolo-gies open source comme PHP et MySQL pour des sites web fortecharge et des applications professionnelles des plus pointues.
Sous laile protectrice de Zend Technologies, les dveloppeurs PHPpourront continuer, grce au Zend Framework, crire des applications la qualit sans cesse amliore. En outre, nous persisterons dans laremise en question de la plupart des compromis gnralement de misedans la communaut web : puissance ou simplicit, bibliothque decomposants ou framework, qualit ou ouverture, entreprise ou particu-lier. Nous sommes convaincus quavec cet outil, les dveloppeurs webnauront plus faire ces choix difficiles : tout est leur disposition.
Nous esprons que cet ouvrage vous guidera efficacement dans le mondedu Zend Framework pour vous mettre sur la voie du dveloppementdapplications de meilleure qualit, plus innovatrices et, surtout, qui vousdonneront toute satisfaction.
Los Gatos, le 29 octobre 2008
Wil Sinclair,Manager Zend Technologies,
chef du projet Zend Framework
Groupe Eyrolles, 2008
Le monde du Web volue sans cesse. Aujourdhui, on ne parle plus de siteInternet, comme ctait le cas avant lan 2000, mais bien dapplication web.
Une application web exploite un ensemble de technologies trs diverses.Au dbut, un webmestre seul pouvait se charger de sa conception, alorsquaujourdhui, des dizaines de personnes, aux comptences toujoursplus larges et pousses, sont souvent ncessaires pour voluer vers le Web 2.0 .
PHP, XML, Services web, SQL et bases de donnes, Authentification,Cryptage, HTTP, Scurit, JavaScript, Ajax, XHTML et Standardssont autant de termes relatifs une ou plusieurs technologies plus oumoins diffrentes les unes des autres, et qui pourtant interagissent lesunes avec les autres.
Dici quelques annes, la diffrence entre une application dite clientlourd, qui sexcute de manire autonome, et une application dite clientlger, qui ncessite un navigateur web, sestompera. Les programmes ontde plus en plus tendance tre orients Web.
La difficult croissante lie la conception dapplications web a faitnatre des solutions et des outils. Le framework en fait partie. Permet-tant de cadrer srieusement les dveloppements en proposant des rglesstrictes de dveloppement, ainsi que des composants gnriques et prts lemploi, Zend Framework est lun dentre eux.
Zend Framework est ainsi un cadre de travail pour PHP 5, langage dontladoption ne cesse de crotre en entreprise, pour des projets toujoursplus importants et stratgiques.
Avant-propos
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 2008VIII
Pourquoi cet ouvrage ?Cest lintrt croissant pour les frameworks, et en particulier celui deZend dj adopt par de nombreux grand groupes dans le monde, quia motiv lcriture de cet ouvrage. travers cet outil, chacun pourrajuger combien PHP est mr pour le monde de lentreprise. Exploiter lesbonnes pratiques du gnie logiciel et les appliquer PHP a permis demonter lun des frameworks les plus puissants du march, qui rend pos-sible le dveloppement dapplications web stratgiques et complexes.
Pourtant, limage exacte de PHP, la matrise de cet outil est loin dtresimple, mme si sa prise en main ne prsente pas de difficult particu-lire. Cest ainsi que Zend Framework dispose dun examen de certifica-tion officiel, pilot par Zend. Cet ouvrage apparat donc naturellementcomme une prsentation de Zend Framework et son utilisation, traversun exemple concret et des dtails prcis sur de nombreux modules com-posant le framework.
qui sadresse ce livre ?Cet ouvrage cible avant tout le dveloppeur, mais aussi le chef de projet,larchitecte ou encore le dcideur. Le choix dun framework est lourd deconsquences. Cet cahier aborde donc Zend Framework en largeur dansun premier temps, puis dans le dtail de ses principaux composants. Il servle galement tre une ressource complte qui aborde de nombreuxprrequis dans ses annexes. Dcideurs et chefs de projet : dcouvrez comment Zend Framework
organise et cadre le dveloppement de vos projets, de lanalyse laconception, en passant par les tests et le dploiement.
Dveloppeurs et architectes : apprenez matriser les composants deZend Framework et voyez comment celui-ci vous met sur une voiequi vous permettra de travailler en harmonie, grce des bonnes pra-tiques de programmation telles que les design patterns.
Structure de louvrageCet ouvrage se divise en deux grandes parties : les chapitres sont consacrs Zend Framework. Une application
dexemple sert de support, exposant un projet concret qui vous suivratout au long de votre lecture pour illustrer les diffrents concepts ;
Ava
nt-p
ropo
s
Groupe Eyrolles, 2008 IX
les annexes abordent les notions thoriques et les prrequis, autant deconnaissances ncessaires pour adopter Zend Framework dans sonensemble et en faire une utilisation optimale.
Dveloppement dune application exempleLe chapitre 1 introduit le concept de framework, pour en arriver rapide-ment Zend Framework. Nous y dtaillons sa structure et les avantagesquil apporte.
Le chapitre 2 prsente lanalyse du cahier des charges de lapplicationexemple qui est utilise tout au long de louvrage. Vous y trouverez aussiles conventions de rdaction que nous avons utilises.
Le chapitre 3 explique comment installer Zend Framework et commentle manipuler de manire simple et rapide, afin de pouvoir passer ensuite une utilisation plus dtaille.
Une prise en main efficace des composants de base de Zend Frameworksera aborde dans le chapitre 4. Ces composants sont omniprsents dansle framework, nous les tudions donc de manire dtaille.
Le chapitre 5 est consacr aux bases de donnes. Notre applicationexemple en toile de fond, vous apprendrez de manire simple dans unpremier temps, puis plus pousse par la suite, matriser un SGBD avecZend Framework.
Prendre en main rapidement le modle MVC de Zend Frameworkconstitue lobjectif du chapitre 6. Tout ce qui caractrise ce modle avecZend Framework y est prsent, et cela vous permettra de matriser sonfonctionnement par dfaut.
Aprs cette prise en main de MVC, le chapitre 7 vous plongera au plusprofond du cur de ce modle, poussant le dtail jusqu prsenter tousles artifices qui le composent. Une telle comprhension est trs impor-tante pour la matrise totale de vos applications futures.
Le chapitre 8, quant lui, vous explique comment fonctionne la gestiondes sessions PHP avec Zend Framework, tout en sattardant sur les con-cepts didentification et de gestion des droits dans une application.
La gestion des langues et linternationalisation sont ensuite abordesdans le chapitre 9.
Le chapitre 10 est consacr aux performances, ou comment utiliser descomposants de Zend Framework permettant la monte en charge delapplication.
La scurit de vos applications tant un point crucial, le chapitre 11explique comment mettre en place une politique de scurit efficace avecZend Framework.
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 2008X
Ouvrir son application sur le monde extrieur sera lobjectif duchapitre 12, dans lequel vous prendrez en main les composants dintro-prabilit de Zend Framework et la gestion des services web.
Le chapitre 13 traite dautres composants divers que notre applicationutilise pour grer des formulaires ou encore gnrer des documents PDF.
Comment squiper pour monter une application web avec ZendFramework ? Le chapitre 14 dtaille les outils utiles un dveloppementefficace : IDE, dbogueur, profileur et tests MVC.
Enfin, le chapitre 15 est un guide dans la cration de vos propres com-posants, dcrivant comment tendre ceux de Zend Framework, qui syprtent merveille.
Prrequis pour bien dvelopperLannexe A vous apprend ce quest un framework et quoi un tel outilest utile en entreprise.
Lannexe B dtaille de manire thorique et pratique les concepts gn-raux lis aux SGBD et aux bases de donnes.
La programmation oriente objet avec PHP 5 naura plus de secret pourvous aprs la lecture de lannexe C.
Une bonne conception objet passe par la matrise des design patterns.Cette notion importante est dtaille en annexe D.
Quant lannexe E, elle est consacre au concept thorique de MVC.
Bien programmer en PHP passe obligatoirement par la connaissance desrouages internes du langage : lannexe F se charge de vous prsentercomment fonctionne PHP.
Lannexe G est consacre au logiciel Subversion, qui permet la gestionefficace des sources dun projet. Cet outil est utilis par Zend Fra-mework.
Enfin, la testabilit logicielle est gage de qualit et de gain de temps.Tester un programme est une pratique que tente de dmystifierlannexe H, centre sur loutil PHPUnit.
RemerciementsNous souhaitons remercier :
Lensemble des personnes qui nous ont accompagnes de prs ou de loindans cette preuve, commencer par nos interlocuteurs dEyrolles pour le
Ava
nt-p
ropo
s
Groupe Eyrolles, 2008 XI
temps et lnergie quils nous ont consacrs : Karine Joly, Muriel Shan SeiFan et toute lquipe ayant particip la mise en forme de cet ouvrage.
Les personnes qui nous ont soutenus et qui ont particip aux relectures en particulier Romain Bourdon, Eric Colinet et Cyril Pierre de Geyer,ainsi que celles qui sont intervenues occasionnellement sous forme derelectures, corrections ou tests des exemples Jean-Marc Fontaine,Damien Sguy, Lu Wang.
Nos socits respectives, qui nous ont apport leur soutien et accord dutemps : Anaska, spcialiste des formations sur les technologies opensource, et OpenStates, spcialiste des missions dexpertise PHP et ZendFramework auprs des entreprises.
Nos familles et nos conjoints qui nous ont galement soutenus et quinous devons de nombreuses soires et week-ends.
Et enfin, lquipe Zend de dveloppement du Zend Framework, quinous a motivs, soutenus, et surtout sans qui cet ouvrage naurait natu-rellement jamais exist.
PROPOS DES AUTEURS
Julien Pauli est architecte certifi PHP et Zend Fra-mework. Il travaille avec PHP tous les jours depuis 2003et possde des notions de Java et de C++. Formateur etconsultant chez Anaska (Alter Way), il est responsabledu ple Zend Framework/PHP dans cet organisme deformation en technologies open source. Depuis 2006(les prmices du projet), il est galement contributeurau Zend Framework en participant llaboration deson code source, la correction de bogues, la traduc-tion de sa documentation et aux grandes lignes dedveloppement, en collaboration directe avec lesquipes de Zend. Confrencier et consultant, il estmembre de lAFUP et toujours prt consacrer dutemps PHP. Il publie des articles dans la presse, et surhttp://julien-pauli.developpez.com.
Guillaume Ponon est expert PHP et Zend Framework,fondateur et grant de la socit OpenStates, spcia-lise dans les missions PHP stratgiques et partenaireZend Technologies et Anaska. Ingnieur EPITA, licencien informatique et certifi entre autres PHP, il inter-vient quotidiennement depuis plus de sept ans sur denombreuses missions dexpertise, de conseil et de for-mation PHP et Zend Framework, auprs de grandscomptes et dentreprises francophones. Il est galementspcialiste des systmes Unix/Linux et pratique les tech-nologies Java et C/C++. Guillaume consacre beaucoupde temps PHP et sa communaut. Il est en particulierauteur de louvrage Best practices PHP 5 et coauteur duMmento PHP et SQL, tous deux publis aux ditionsEyrolles, confrencier et rdacteur sur de nombreuxsalons et revues de presse, prsident de lAFUP 2007-2008, fondateur et producteur de la principale missionWeb TV consacre PHP : PHPTV (http://www.phptv.fr).Pour en savoir plus : http://www.openstates.com.
Table des matires
Groupe Eyrolles, 2005 XIII
AVANT-PROPOS..........................................................VII
1. INTRODUCTION ZEND FRAMEWORK .............................. 1Avantages et inconvnients de Zend Framework 2Structure et principe 3
Les rgles de dveloppement 4Les composants rutilisables 4Larchitecture 4
Conseils pour bien dmarrer avec Zend Framework 5Prrequis 5tat desprit 6
En rsum 7
2. CAHIER DES CHARGES DE LAPPLICATION EXEMPLE............ 9Expression du besoin 10Lobjectif : votre application ! 10Spcifications fonctionnelles et techniques 11Maquettes 12Mises en garde et conventions 18
Conventions 18Plateforme technique 18
En rsum 19
3. INSTALLATION ET PRISE EN MAIN .................................. 21Tlchargement du paquetage 22
Tlchargement sous Windows 23Tlchargement sous Unix 23Configuration du serveur Apache 23Tlchargement par le dpt Subversion 24
Premire utilisation du framework 25En rsum 26
4. COMPOSANTS DE BASE................................................ 29Configuration de lenvironnement 30Zend_Loader 30
Exemple dutilisation 31Chargement manuel dune classe 31Chargement automatique dune classe (autoload) 32Aller plus loin avec Zend_Loader 32
Intgration dans lapplication 34
Zend_Config 34Exemples dutilisation 35
Avec un fichier ini 35Avec un fichier XML 36Avec un fichier PHP 37
Intgration dans notre application 38Zend_Log 40
Quelques notions 40Exemple dutilisation 41Utilisation conjointe avec Zend_Config 42Intgration dans notre application 43
Zend_Debug 43Exemple dutilisation 43Utilisation conjointe avec Zend_Log 44
Zend_Exception 44Zend_Registry 45
Exemple dutilisation 46Intgration dans lapplication 46
En rsum 47
5. ACCS AUX BASES DE DONNES ....................................49Introduction 50Utiliser les SGBD 51
Les SGBD utilisables par Zend Framework 51Cration dune connexion 51
Requtes sur une base de donnes 53Envoyer des requtes 55
Effectuer des requtes de type SELECT avances 57Utiliser la passerelle vers les tables 59Crer et excuter des requtes 60Manipuler des donnes 61
Rcuprer des enregistrements 61Modifier et sauvegarder des enregistrements 63
Agir sur les tables dpendantes 65Performances et stabilit 68
Les bons rflexes 69Aller plus loin avec le composant Zend_Db 69
Crer ses requtes personnalises 69tendre Row et Rowset 71
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 2005XIV
En rsum 74
6. ARCHITECTURE MVC .................................................. 77Zend_Controller : utilisation simple 78
Mettre en place larchitecture 78Parcours dune requte HTTP 79
Exemple simple dutilisation de Zend_Controller 80Mettre en place le squelette de lapplication 82Code du squelette 83
Attribuer des paramtres la vue 84Manipulation des donnes HTTP 85Initialisation et postdispatch 87Zend_Layout : crer un gabarit de page 88
Appel et contenu du gabarit principal 89En-tte et pied de page 91Dclaration du sous-menu 92
Gestion par dfaut des erreurs 93Les aides daction 94
Utiliser une aide daction existante 95Crer une aide daction utilisateur 96
En rsum 99
7. ARCHITECTURE MVC AVANCE................................... 101Zend_Controller : utilisation avance 102Les diffrents objets de MVC 102
Fonctionnement global de MVC 104Excution du processus de distribution de la requte 105Un processus flexible et avanc 108
Fonctionnement dtaill des objets du modle MVC 109Contrleur frontal (FrontController) 109Objet de requte 113Objet de rponse 115Routeur 117Plugins de contrleur frontal 120Plugins inclus dans la distribution de Zend Framework 123Le distributeur (dispatcheur) 125Les contrleurs daction 126Les aides daction 129La vue 142Les aides de vue 143Les filtres de vue 147
En rsum 148
8. SESSIONS, AUTHENTIFICATION ET AUTORISATIONS......... 151Notions lmentaires 152Les sessions 153
Pourquoi choisir Zend_Session ? 153
Configurer sa session 154Utiliser les espaces de noms 155
Gestion de lauthentification avec Zend_Auth 156Pourquoi utiliser Zend_Auth ? 157Les adaptateurs 157
Exemple dutilisation 158Zend_Acl : liste de contrle daccs 160Pourquoi utiliser Zend_Acl ? 160
Un peu de thorie sur les ACL 160Exemple pratique 161
En rsum 165
9. INTERNATIONALISATION .............................................167Avant de commencer... 168
Les composants Zend et leurs quivalents PHP 168Attention aux jeux de caractres 169
Zend_Locale : socle de base de linternationalisation 169Zend_Translate : grer plusieurs langues 170
Pourquoi utiliser Zend_Translate ? 171Les adaptateurs 171Exemple simple dutilisation 172Exemple de changement dadaptateur 174Internationalisation avance 175
Rgles darchitecture 175Mettre en place ladaptateur gettext 176Mettre en place les chanes traduire 176Crer les fichiers de traduction gettext (*.mo) 177Modifier la langue 178
Zend_Currency : gestion des monnaies 179Pourquoi utiliser Zend_Currency ? 179Affichage des monnaies 179Informations sur les monnaies 180
Zend_Date : gestion de la date et de lheure 180Pourquoi utiliser Zend_Date ? 180
En rsum 182
10. PERFORMANCES ......................................................185Quest-ce que la gestion de cache ? 186
Pourquoi utiliser un cache ? 186Mises en garde concernant la gestion du cache 186
Zend_Cache : gestion du cache 187Choisir son frontal et son support de cache 188Utilisation de Zend_Cache dans lapplication 190
Implmentation de Zfbook_Cache 190Utilisation du cache dans lapplication 192Amlioration des performances des composants Zend 193
Zend_Memory : gestion de la mmoire 194
Tabl
e de
s m
ati
res
Groupe Eyrolles, 2005 XV
Exemple pratique 194Amliorer les performances gnrales de lapplication 195
Les bons rflexes 195Compiler Zend Framework dans APC 196
En rsum 199
11. SCURIT............................................................... 201En quoi consiste la scurit sur le Web ? 202
Rgles de scurit lmentaires 203Solutions de scurit de Zend Framework 203
Les validateurs 203Les filtres 204
Les attaques courantes 204Le Cross Site Scripting (XSS) 205
Attaque XSS 206Les protections 206
Le Cross Site Request Forgery (CSRF) 207Attaque CSRF 208Les protections 209
Sessions et Cookies 209Attaque dune session 210Les protections 210
Linjection SQL 212Attaque par injection SQL 212Les protections 212
En rsum 213
12. INTEROPRABILIT ET SERVICES WEB ......................... 215Linteroprabilit, quest-ce que cest ? 216Les solutions existantes 217
REST 217Avantages 217Inconvnients 217
SOAP 218Avantages 218Inconvnients 218
XML-RPC 218RSS et Atom 218
Prparer le terrain 219Zend_Rest : linteroprabilit simplifie 222
Principe de REST 222Zend_Rest : REST, version Zend Framework 223
Zend_Soap : linteroprabilit par dfinition 227Zend_Feed : pour les protocoles simples RSS et Atom 230En rsum 235
13. AUTRES COMPOSANTS UTILES................................... 237Prparation de larchitecture 238
Les composants (library) 238MVC 242
Zend_Mail : envoi de-mails 243Envoyer un simple e-mail 243Envoyer un e-mail complet 245
Zend_Pdf : crer des fichiers PDF 247Zend_Form : gnration et gestion de formulaires 250
Crer un formulaire 251Assigner des filtres ou des validateurs 255
Tous les composants de Zend Framework 256En rsum 258
14. OUTILS ET MTHODOLOGIE .......................................261Lditeur : Zend Studio pour Eclipse 262
Un environnement intgr pour optimiser ses dveloppements 262Intgrer Zend Framework dans lIDE 262
Personnaliser ses composants 265Un code source de meilleure qualit grce au formateur 266
Le dbogueur 266Analyse des performances avec le profileur 268Tests fonctionnels avec Zend_Test 270
Zend_Test, pour quoi faire ? 270Prise en main de Zend_Test 271
Templates Zend Studio For Eclipse 271Gestion du bootstrap 272crire des tests 274
Faut-il tout tester ? 276En rsum 277
15. UTILISATION AVANCE DES COMPOSANTS...................279MVC et les bibliothques 280Crer un composant utilisateur 281
Rgles fondamentales et conventions 281Principe et organisation 282Exemple 282
Modlisation minimale 283Implmentation du composant 284
Driver un composant existant 288Rgles fondamentales 288Ajouter une fonctionnalit un composant 289Modifier le comportement dun composant 289Simplifier laccs un ou plusieurs composants 290
Intgrer un composant externe 292En rsum 293
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 2005XVI
A. QUEST-CE QUUN FRAMEWORK ?............................... 295Dfinition et objectifs 296Le framework au service du dveloppement web 297
Risques et prils des pratiques courantes 297Le framework la rescousse 298Inconvnients du framework 299
En rsum 300
B. BASES DE DONNES .................................................. 301Quest-ce quun SGBD ? 302Architecture dun SGBD 302
La base de donnes 303Exemple simple 303Notions techniques 303Reprsentation graphique 304Types de donnes 304Cls et contraintes dintgrit 305
Les principaux SGBD du march 305MySQL 305Oracle 306SQLite 307
Connexion PHP 307Notions avances 309
Les ORM 309Couches dabstraction 310Rplication et clustering 310
C. PROGRAMMATION ORIENTE OBJET............................. 311Concepts de base 312
Tout est question dorganisation 312Ranger ses procdures dans les bons rayons 313
Quest-ce quune classe ? 313Dclarer une classe 313Des classes et des objets 314
Implmentation en PHP 315Visibilit 316Construction et destruction 317Hritage 318Variables et mthodes statiques 320Constantes de classe 321Classes, mthodes abstraites et interfaces 322
Abstract 322Interfaces 324Final 325
Modlisation et gnie logiciel 326Les relations entre classes 326
Lhritage 326Lassociation 326
Lagrgation 327La composition 328La dpendance 328
Les diagrammes UML 329Le diagramme de cas dutilisation 329Le diagramme de classes 330Le diagramme de squence 331
La rtro-ingnierie 331Les logiciels de modlisation 332
ArgoUML 333Umbrello 333StarUML 334Dia 334
Concepts objet PHP avancs 335Les exceptions 335La gestion des objets et les oprateurs 340
Rfrences et clonage 340Oprateurs et fonctions relatives aux objets 341Typage dargument 343
Les mthodes magiques 344__get() et __set() 345__call() 346__isset(), __unset() 347__clone() 348__toString() 349__sleep(), __wakeup() 350
Linterface de Rflexion 352SPL : Standard PHP Library 356
Iterator 357RecursiveIterator 358Autres itrateurs 360
Lautoload 361
D. DESIGN PATTERNS ....................................................365Comprendre les motifs de conception 366Motif Singleton 367
Exemple de motif Singleton en PHP 367Un Singleton dans Zend Framework ? 368
Motif Fabrique 368Exemple de motif Fabrique en PHP 368Une Fabrique dans Zend Framework ? 370
Motif Proxy 370Exemple de motif Proxy dynamique 370Un Proxy dans Zend Framework ? 373
Motif Observateur/Sujet 374Exemple de motif Observateur 374Un Observateur/Sujet dans Zend Framework ? 378
Tabl
e de
s m
ati
res
Groupe Eyrolles, 2005 XVII
Motif Registre 378Exemple de motif Registre 378Un Registre dans Zend Framework ? 380
Et bien dautres encore... 380
E. LE PATTERN MVC EN THORIE ................................... 383Pourquoi utiliser MVC ? 384
Des avantages pour le travail en quipe 384Des avantages pour le dveloppement et la maintenance 385
MVC schmatis 386Une implmentation intuitive 386Limplmentation MVC 388Et les bibliothques ? 390
F. COMMENT FONCTIONNE PHP ? .................................. 393PHP, quest-ce que cest ? 394
Principe de fonctionnement 394Utilisation autonome 394Utilisation avec un serveur HTTP 396
Composition 397Environnement 398
Conseils pour paramtrer son environnement 399Paramtrer le fichier php.ini 400
Comment optimiser PHP ? 402Rduire les accs disque 403Rduire les phases de compilation 403
Aperu du cache APC 404Fonctionnement dAPC 405Configuration dAPC 406Fonctions et cache utilisateur 407
Fonctions dinsertion 407Fonctions dajout 407Fonctions de suppression 407Fonction dinterrogation 408
G. UTILISER SUBVERSION...............................................409Subversion dans un projet 410
Subversion pour Zend Framework 411Prise en main dun client Subversion 412
Installation dun client (Windows) 412Quelques commandes Subversion 413Liaison du dpt Subversion avec un serveur web 416
H. PRATIQUE DES TESTS AVEC PHPUNIT ..........................417Prsentation du concept de test 418
Les tests unitaires 419Un exemple simple 419
Aller plus loin avec les tests : PHPUnit 422Installer PHPUnit 422crire des tests avec PHPUnit 423
Exemple de test unitaire 423Concept du dveloppement pilot par les tests 426
Organisation du projet 426Dfinition de la classe de tests des Produits 426Dfinition de la classe de tests du Panier 428
Encore plus loin avec PHPUnit... 433Les tests de Zend Framework 435Tests fonctionnels avec Zend_Test 436
INDEX ......................................................................437
Groupe Eyrolles, 2008
chapitre 1
Groupe Eyrolles, 2008
Introduction Zend Framework
Une entreprise, pour avancer, doit respecter des rgles et disposer doutils pour sa gestion et sa croissance. Pour les dveloppements informatiques, cest le framework qui joue ce rle de cadre et de bote outils. Aujourdhui, de nombreux frameworks et composants existent pour PHP, tel point quil est difficile de faire un choix. Zend Framework, de plus en plus pris, fait partie de ces alternatives. Est-il adapt vos attentes et vos mthodes de travail ?
SOMMAIRE
B Avantages et inconvnients
B Structure et principe
B Conseils pour bien dmarrer
MOTS-CLS
B avantagesB inconvnientsB apportsB structureB principeB introduction
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 20082
Ce chapitre rsume lintrt de Zend Framework pour vos dveloppe-ments PHP. Son objectif est de sassurer que cet outil est bien adapt vos besoins et de vous donner les cls qui permettront de dbuter effica-cement.
Nous nous adressons ici aussi bien au technicien qui souhaite faire lechoix dun outil pour ses dveloppements quau dcideur qui souhaite enconnatre les avantages stratgiques.
Avantages et inconvnients de Zend FrameworkIl existe de nombreux frameworks pour PHP. Zend Framework se veut,comme PHP, simple et souple utiliser, ce qui est plus ou moins le casdans la ralit, comme nous le verrons par la suite. Comme tout fra-mework, il propose des mthodes, des ressources et des outils. Il sadapte PHP pour amliorer la qualit et la fiabilit du code, dans une certainemesure. De nombreuses solutions proposes aux problmes courantssont simples, dautres comportent une implmentation avance quincessite un apprentissage pralable.
Commenons par quelques avantages essentiels : une communaut forte qui assure une durabilit exceptionnelle autant
que ncessaire. La prennit des dveloppements est fortementdpendante de celle du framework ;
des concepteurs expriments et un code source test pour une qualit decode garantie. Utiliser un outil fiable rduit considrablement les ris-ques engags ;
un support commercial et technique, assur par la socit Zend, qui restematresse des dveloppements, un gage de prennit et de fiabilit ;
des conventions claires et compltes qui vont dans le sens du travail enquipe. Cela permet daugmenter la vitesse de dveloppement et defaciliter la reprise du projet long terme ;
des composants souples, de plus en plus nombreux et complets, avecpeu dinterdpendance. Ces ressources couvrent tous les dveloppe-ments redondants et communs aux projets web, qui, grce au fra-mework, ne sont plus redvelopper ;
un principe de fonctionnement simple qui nimpose pas une structurerigide. Le dveloppeur est guid dans sa dmarche, sans tre con-traint ni laiss pour compte ;
B.A.-BA Quest-ce quun framework ?
Framework signifie cadre de travail en fran-ais. Le principal objectif de cet outil est de pro-poser une dmarche et des ressources pour mieuxmatriser les dveloppements et gagner du temps.Lannexe A propose une introduction plus dtaillede ce quest un framework.
ALTERNATIVE Autres frameworks PHP
En France, les principaux autres frameworks quelon trouve sur le march des applications profes-sionnelles sont les suivants : Symfony : un projet mr qui propose une
architecture solide, mais lgrement plus rigide.Il est appuy par une grande communautdutilisateurs ainsi quune entreprise (Sensio).
Prado : un framework srieux qui propose unearchitecture intressante et un fonctionnementtrs spcifique.
Copix : un projet mr destination du mondeprofessionnel, qui est capable de rpondre denombreux besoins.
Jelix : un framework franais, comme Copix,de bonne qualit.
CodeIgniter : un framework de plus en pluspopulaire pour sa simplicit et ses perfor-mances.
La souplesse de Zend Framework est telle que,quelle que soit la base choisie, une collaborationcohrente peut tre mise en place avec dautresframeworks ou composants.
1
Intr
oduc
tion
Ze
nd F
ram
ewor
k
Groupe Eyrolles, 2008 3
une installation et une prise en main simples et rapides. Cette caractris-tique rduit les risques dus au turn-over, cest--dire le dveloppe-ment dun projet par plusieurs dveloppeurs qui se relaient ;
la possibilit de sadapter nimporte quelle application ou dadapternimporte quelle ressource dans les composants. Cette absence delimitation est une vritable porte ouverte linnovation.
Les inconvnients que nous pouvons noter lheure actuelle sont lessuivants : Zend Framework propose des ressources dites de bas niveau. En
dautres termes, le framework ne se considre pas comme un L4Gqui permettrait de construire une application presque sans code, cequi limiterait les possibilits dinnovation et de personnalisation ;
rejoignant le point prcdent, Zend Framework est orient compo-sants. Monter une application complte est complexe et requiert debonnes notions de dveloppement logiciel ;
ce framework demande un minimum de connaissances en programma-tion oriente objet (POO) et ne fonctionne pas avec PHP 4. Il est impor-tant en particulier de comprendre les aspects thoriques de certainscomposants, ce qui est en partie le but de cet ouvrage.
Structure et principe
Dun point de vue technique, Zend Framework apporte PHP ce queles rails apportent la locomotive : un support qui permet davancer effi-cacement dans les dveloppements ; la figure 1-1 illustre ce principe. Lesgrandes lignes dun framework sont les suivantes : fournir des rgles de dveloppement claires et prcises (conventions) ; fournir des composants rutilisables (ressources) ; proposer un cadre technique pour le dveloppement (architecture).
T L4G
L4G signifie langage de 4e gnration . Le prin-cipe dun L4G est de pouvoir dvelopper quasi-ment sans toucher au code grce des outils,souvent graphiques, dits de haut niveau. Les lan-gages de 3e gnration permettent une meilleurecomprhension du code par lhomme grce unesyntaxe et des mots rservs. Il sagit des langagesprocduraux et objets : C, Java, PHP, etc. Ladeuxime gnration comprend les langages detype assembleur et la premire, le langagemachine avec des 0 et des 1.
Figure 11Apport de Zend Framework dans le dveloppement web
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 20084
Les rgles de dveloppementElles dcrivent comment organiser et crire le code PHP : le formatage des fichiers comment les fichiers sont-ils organiss et
que contiennent-ils ? les conventions de nommage comment nomme-t-on les fonctions, les
classes, les variables, etc. ? le style de codage toutes les rgles qui dcrivent la forme du code
PHP : espaces, indentations, casse, etc.
quoi servent les rgles de dveloppement ? travailler en quipe il est plus facile de relire du code dont on con-
nat les rgles dorganisation et dcriture ; gagner du temps en sachant o se situent les fonctionnalits et
comment les trouver, de manire immdiate ; aller plus loin en ayant la matrise globale dune application mme
lorsquil y a beaucoup de code source et de fonctionnalits dont onnest pas forcment lauteur.
Les composants rutilisablesIls mettent disposition des fonctionnalits courantes que lon retrouvedans la plupart des applications web. Cela permet : dviter davoir les dvelopper ; davoir disposition des fonctionnalits fiables, utiles et testes ; de minimiser la densit du code source, donc gagner du temps et
ainsi optimiser le temps de mise sur le march (time to market ou dlaide lancement).
LarchitectureElle est le squelette de lapplication PHP la base technique sur laquellele dveloppeur peut construire. Larchitecture permet en particulier : davoir des repres essentiels pour sorganiser et grer terme un code
source dense, avec des fonctionnalits nombreuses et complexes ; dviter de partir dune page blanche grce la prsence dun socle
technique et dune mthodologie ; de favoriser ladoption du mme modle pour le dveloppement de
plusieurs applications.
Nous verrons par la suite que larchitecture propose par Zend Fra-mework est assez souple pour disposer de plusieurs configurations possi-bles, notamment lorsque lon doit grer plusieurs applications ou uneapplication qui doit tre spare en modules.
MTHODE Rgles de dveloppement
Les rgles de dveloppement compltes de ZendFramework sont dcrites dans la documentationofficielle ladresse suivante :B http://framework.zend.com/manual/fr/
coding-standard.htmlSi vous navez pas de rgles prcises, nous vousconseillons alors fortement de vous baser surcelles-ci.
T Composant
La majorit des chapitres de cet ouvrage est con-sacre aux composants rutilisables. Si Zend Framework en propose de nombreux prts lemploi, il est toujours possible de les personna-liser ou de les complter, mais aussi den crer denouveaux, trs facilement.
CULTURE Architecture et MVC
On entend souvent parler de ce modle trs popu-laire quest MVC (Modle-Vue-Contrleur). Larchi-tecture est directement lie cette notion qui estlargement dtaille, en thorie dans lannexe E et,en pratique, dans les chapitres 6 et 7.
1
Intr
oduc
tion
Ze
nd F
ram
ewor
k
Groupe Eyrolles, 2008 5
Conseils pour bien dmarrer avec Zend FrameworkAvant de commencer avec Zend Framework, il est important dtreconscient de certains prrequis et de ltat desprit adopter pourapprendre dans de bonnes conditions.
PrrequisUne bonne comprhension de Zend Framework passe par la matrisedun bon nombre de notions.
Afin de garantir lacquisition rapide de ces notions par les dbutants etdassurer un contenu le plus prcis et concis possible, voici une liste deces notions complmentaires traites en annexes. Le framework : il est important de bien comprendre les avantages
utiliser un framework ; si ce nest pas encore le cas, reportez-vous lannexe A.
Les bases de donnes : notamment, les notions de couche dabstrac-tion, de passerelles, dORM et de CRUD. Si vous ne les matrisezpas, alors lannexe B vous permettra de comprendre leurs principes,ncessaires lapprentissage du composant Zend_Db.
La programmation oriente objet : sujet aussi vaste que ncessaire ! Sivous ne matrisez pas les fondements de la POO, vos possibilits avecZend Framework seront trs limites. Lannexe C permet ceux quine matrisent pas cette notion daborder les bases ncessaires et dallerplus loin si besoin.
Les design patterns : ils permettent dapprofondir la comprhensionde certains composants et de rpondre des solutions courantes dePOO. Cette notion est aborde dans lannexe D.
Le pattern MVC : lun des plus importants design patterns mrite unchapitre thorique. Comprendre MVC est ncessaire pour aborderlarchitecture dune application web dans son ensemble. MVC esttrait dans lannexe E.
Le langage PHP : savoir comment fonctionne PHP est un gage deconfort indniable lorsquon lutilise tous les jours, ne serait-ce quepour loptimisation et la qualit de vos dveloppements. Pour revoirces aspects, lisez lannexe F.
Le gestionnaire de sources Subversion : le code source de Zend Fra-mework est stock dans un dpt de donnes Subversion. Vos projetsdevraient eux aussi utiliser un gestionnaire de version, car cela pr-sente des avantages prcieux, dtaills dans lannexe G.
CONSEIL Comprendre le fonctionnement du framework
Il est possible, en suivant des tutoriels, darriver dvelopper du code Zend Framework correct. Nousinsistons par contre sur le fait que la comprhensiondu fonctionnement (interne) de Zend Framework estun avantage indniable lorsquil sagit dcrire uneapplication, quelle quen soit la complexit.
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 20086
Les tests unitaires avec PHPUnit : au cur de la gestion de la qualitet de la maintenance du code se trouvent les tests unitaires. quoiservent-ils et comment fonctionnent-ils ? la lecture de lannexe H,vous aurez lessentiel en main pour aborder vos dveloppements,muni de cette notion devenue essentielle.
tat despritLoin de nous lide dimposer ici une conduite restrictive, il sagit justede prciser une chose essentielle : les concepteurs de Zend Frameworkont spcialement conu cet outil pour tre limage de PHP. Il est doncimportant de prendre en considration les faits suivants : Zend Framework nimpose rien, il propose. Libre vous de partir dans
la direction que vous souhaitez, tant au niveau de larchitecture quede lutilisation des composants, ou mme avec vos propres normes...
Zend Framework est simple. Quil sagisse de son architecture ou de laplupart de ses composants, lide nest pas davoir faire une usine gaz, mais un outil qui permet de dvelopper plus vite et plus facile-ment.
CULTURE Simplicit et souplesse
Ces deux notions, si elles ont lavantage de per-mettre daller vite et de favoriser fortement linno-vation, ne sont pas totalement sans inconvnient.Se perdre dans une architecture brouillon est sansaucun doute le premier travers viter : il estncessaire dtre organis et rigoureux ! Dans cetouvrage, nous mettons un point dhonneur main-tenir cote que cote la rigueur ncessaire laproduction de dveloppements cohrents.
1
Intr
oduc
tion
Ze
nd F
ram
ewor
k
Groupe Eyrolles, 2008 7
En rsumZend Framework est un outil qui adopte la souplesse et, dans une cer-taine mesure, la simplicit de PHP. Mais comme tout outil, pour enrcolter les meilleurs fruits, il est ncessaire de le matriser et de respecterses rgles. Nous attirons donc votre attention sur les points suivants : Zend Framework est un outil puissant, soutenu par une large com-
munaut et prt pour la mise en uvre dapplications stratgiques. Cet outil comporte des conventions, une architecture modulaire qui
favorise la rutilisabilit, autant de principes ne pas perdre de vue ! Enfin, une bonne connaissance de PHP 5 et de la programmation
oriente objet, entre autres, est indispensable. Les annexes de cetouvrage vous aideront acqurir les prrequis ncessaires la matrisede Zend Framework.
Groupe Eyrolles, 2008
chapitre 2
Groupe Eyrolles, 2008
Cahier des charges de lapplication exemple
lorigine de tout projet, on trouve les mmes mots-cls : besoins, objectifs, cahier des charges, spcifications fonctionnelles et techniques. Sans compter la joie de commencer un tout nouveau projet et lapprhension de sa ralisation... Quels que soient les objectifs et les caractristiques de votre projet, cet ouvrage vous fournira toutes les informations techniques et mthodologiques dont vous aurez besoin pour btir une application solide avec Zend Framework.
SOMMAIRE
B Cahier des charges
B Conseils pour commencer
MOTS-CLS
B spcificationsB espace de travailB outilsB fonctionnalitsB organisation
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200810
Loutil qui est dcrit dans ce livre savre aujourdhui une rfrenceincontestable pour dvelopper efficacement en PHP. Il est parfaitementadapt PHP par sa souplesse et la richesse de ses composants. De lasimple page comportant quelques lments dynamiques lapplicationcritique et industrielle, Zend Framework aura sa place pour faciliter etfiabiliser vos dveloppements.
Pour bnficier de tous les avantages quoffre Zend Framework, unephase dadoption de loutil simpose. Lobjectif de cet ouvrage est de vousfaciliter grandement cette tape grce de nombreux exemples concretset conseils aviss.
Expression du besoinVoici lexpression du besoin de lapplication exemple. Il nest bien entendupas obligatoire de la suivre la lettre. Vous pouvez vous servir de cetexemple tel quel, tout comme inventer votre propre application. Seules lesfonctionnalits changent ; la technique, elle, reste la mme. Allons-y
Notre entreprise possde un certain nombre de salles de runion que denombreux collaborateurs internationaux doivent se partager. Aujourdhui,il est difficile de savoir un instant T quelles sont les salles libres. Deplus, les rservations se font de manire trs improvise.
Notre besoin : mettre en place un outil qui permette aux collaborateursde lentreprise de rserver une salle et de consulter un calendrier desrservations.
Bien entendu, il y a dautres dtails qui peuvent tre intressants, tels quela possibilit ultrieure de lier le calendrier des rservations celui descollaborateurs, exporter en CSV ou en PDF pour transmettre linforma-tion, ou scuriser laccs loutil, de manire ne pas divulguer linfor-mation aux gens de lextrieur.
Lobjectif : votre application !Comme nous lavons dj fait remarquer, Zend Framework est capablede sadapter des applications de toute taille et de toute nature. Nousallons donc rgulirement mettre laccent sur les choix faire en fonctiondes caractristiques de votre projet, car lobjectif est bien de vous faciliterla tche grce un outil efficace.
Nous verrons en particulier que, pour la plupart des composants, vousavez le choix entre les utiliser compltement, partiellement, ou pas du
2
Cahi
er d
es c
harg
es d
e la
pplic
atio
n ex
empl
e
Groupe Eyrolles, 2008 11
tout, ou encore en modifiant ou compltant leurs caractristiques. Cettesouplesse est intressante, aussi bien pour les nouveaux projets que pourla migration de projets existants, car il est parfaitement possible deffec-tuer le travail progressivement.
Dans lapplication exemple, nous tcherons de balayer ces diffrentespossibilits de manire vous familiariser avec la logique du framework.Soyez curieux ! Essayez les diffrentes possibilits qui soffrent vous,ces connaissances seront des armes efficaces pour votre travail, vous vousen rendrez rapidement compte.
Enfin, nous mettons aussi votre disposition lapplication exemple enligne. Vous pouvez la faire fonctionner et la manipuler comme bon voussemble, au gr de votre lecture.
Spcifications fonctionnelles et techniquesAfin de se concentrer sur lessentiel, en loccurrence notre apprentissageefficace de Zend Framework, ces spcifications resteront minimales.
Rapidement, voici quoi peuvent se rsumer nos spcifications fonc-tionnelles, suite lexpression des besoins exprims ci-avant. Pour com-mencer, voici une liste de fonctionnalits qui doivent apparatre danslapplication : Disposer dune application en deux parties : une partie commune et
une partie rservation. Dautres parties pourront voir le jour aprs,avec ventuellement davantage de modularit.
Dans la partie rservation, il doit tre possible davoir : une liste pagine de rservations en cours ; un formulaire pour crer ou diter une rservation ; un bouton pour supprimer une rservation ; une page qui permet dexporter des rservations et de mettre en
place des solutions dintroprabilit ; une page daccueil.
Il doit tre possible de naviguer en franais ou en anglais, au choix, etde pouvoir passer de lun lautre en temps rel.
Afin de garantir la scurit des donnes, lutilisateur doitsauthentifier : tout le monde a le droit de lire les rservations, y compris les non
authentifis (visiteurs) ; une fois authentifi, il doit tre possible de crer des rservations et de
supprimer/diter ses propres rservations (mais pas celles des autres) ;
URL Application exemple
Vous pouvez tlcharger lapplication exemple enligne ladresse suivante :B http://www.zfbook.fr
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200812
un statut administrateur permet en revanche de tout faire, il estattribu un nombre limit dutilisateurs.
Il doit tre possible dexporter des donnes dans diffrents formatsafin dchanger ses fichiers : export PDF dune page ou de lensemble des rservations ; export CSV dune page ou de lensemble des rservations ; export XML dune page ou de lensemble des rservations ; export JSON dune page ou de lensemble des rservations.
Cette application devra disposer dun moyen de communiquer avecdautres applications de lentreprise ; pour cela, nous avons besoin desservices suivants : un accs SOAP aux oprations de base (consulter, ajouter, diter,
supprimer) ; un accs REST aux oprations de base, comme laccs SOAP ; un accs JSON la liste pagine des rservations.
Enfin, cette application devrait voluer dans le temps avec des ajoutsou des amliorations de fonctionnalits. Il convient ainsi dtre leplus modulaire et prventif possible quant au design logiciel.
En ce qui concerne les spcifications techniques permettant la mise enuvre des fonctionnalits exprimes, nous nous contenterons de choisirZend Framework comme outil de dveloppement principal, et dadapterles bonnes pratiques dutilisation des composants au travail raliser.
Nous avons apport un soin tout fait particulier au gnie logiciel. Voustrouverez dans les chapitres de cet ouvrage beaucoup de schmas UML.Aussi, lcriture du code respecte les rgles du design et de larchitecturelogiciels : testabilit, extensibilit, design patterns... autant de notions quisont largement abordes dun point de vue thorique dans les annexes.
Un des buts de cet ouvrage est de vous faire comprendre le fonctionne-ment de Zend Framework ; les schmas UML et les prises de dcisionsface certaines problmatiques sont ainsi tourns dans ce sens.
MaquettesQuoi de plus parlant quune srie de maquettes pour avoir un aperu delapplication finale, comme nous pouvons en voir dans de nombreuxprojets ?
NOTE Choix techniques
Tel que nous lavons not dans la sectionLobjectif : votre application, nous apporte-rons chaque composant de Zend Framework unexemple intgral, mme si les choix dimplmenta-tion, qui se veulent complets, ne sont pas toujoursadapts aux caractristiques de lapplication. Quoiquil en soit, nous vous guiderons pour faire deschoix pertinents avec des remarques situes enmarge.
2
Cahi
er d
es c
harg
es d
e la
pplic
atio
n ex
empl
e
Groupe Eyrolles, 2008 13
Figure 21Page daccueil en franais
Figure 22Page daccueil en anglais
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200814
Figure 23Liste des rservations
en cours
Figure 24dition dune rservation
2
Cahi
er d
es c
harg
es d
e la
pplic
atio
n ex
empl
e
Groupe Eyrolles, 2008 15
Figure 25Ajout dune rservation
Figure 26Page daccueil des fonctionnalits dexport et dinteroprabilit
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200816
Figure 27Export en PDF
de la liste des rservations
Figure 28Export en CSV
de la liste des rservations
2
Cahi
er d
es c
harg
es d
e la
pplic
atio
n ex
empl
e
Groupe Eyrolles, 2008 17
Figure 29Export en XML depuis la liste pagine
Figure 210Export en JSON depuis la liste pagine
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200818
Mises en garde et conventionsCette application est un exemple. Mme si ses auteurs ont us de touteleur attention pour la concevoir, celle-ci ne peut tre considre nicomme complte ni comme parfaitement scurise.
Aussi des choix ont-ils t effectus parfois dans le but de montrer uneutilisation prcise que nous avons juge intressante, alors quintrins-quement la fonctionnalit en question peut ne pas tre juge comme jus-tifie. Le but reste le mme : vous montrer une fonctionnalit qui peutsappliquer un endroit appropri.
ConventionsNous avons ainsi choisi quelques conventions de bon sens lors de lardaction de cet ouvrage : Nos schmas UML ne sont pas tous complets, auquel cas ils auraient
pris des pages entires ; ainsi, ils sont souvent nots comme simplifis,ce qui signifie que les mthodes et les attributs napparaissent pas oualors que certaines classes moins importantes nont pas t intgres.
Toujours dans le but damliorer la clart des illustrations, les classesdexception napparaissent pas dans nos modles UML de Zend Fra-mework.
Les codes sources crits dans cet ouvrage rduisent les commentairesPHPDOC afin damliorer la lisibilit. Les commentaires utiles lacomprhension de certaines lignes, en revanche, sont bien prsents.
Les codes sources peuvent aussi lgrement diffrer du code sourcerel final de lapplication, que vous pouvez tlcharger sur Internet,toujours pour des raisons de lisibilit et de comprhension.
Enfin, tous les exemples de lapplication respectent les rgles de syn-taxe de Zend Framework. Celles-ci sont trs prcises et nous vousinvitons vivement les respecter.
Plateforme techniqueConcernant la plateforme technique de dveloppement, nous avonsutilis : Linux (Xubuntu, Debian) et Windows (XP) ; Zend Framework en version 1.6.2 ; PHP en version 5.2.6. Quelques problmes de compatibilit peuvent
apparatre dans les versions 5.1.x de PHP ; MySQL en version 5.0.51 ; Apache en version 2.2.8 ;
RAPPEL URL de lapplication exemple
B http://www.zfbook.fr
2
Cahi
er d
es c
harg
es d
e la
pplic
atio
n ex
empl
e
Groupe Eyrolles, 2008 19
Zend Studio pour Eclipse en version 6.1 pour la gestion du projet ; Subversion en version 1.4.6 ; PHPUnit en version 3.3.1.
En rsumUn exemple pratique de dveloppement vous accompagnera du chapitre 3au chapitre 15 de cet ouvrage. Il sagit dune application de gestion desalles de runion. Ce dveloppement a pour objectif de montrer commentraliser un projet concret avec Zend Framework. Cest un support pour lamajeure partie des exemples. En revanche, du fait quil exploite un grandnombre de composants en long, en large et en travers, et compte tenu desa simplicit, il sagit avant toute chose dun outil pdagogique. vousdarchitecturer votre application bon escient.
Enfin, pour bien dmarrer, privilgiez des versions rcentes de PHP,Apache et MySQL.
Groupe Eyrolles, 2008
chapitre 3
Groupe Eyrolles, 2008
Installation et prise en main
Pour bien des outils, la difficult dinstallation est un frein leur adoption. Cest loin dtre le cas de Zend Framework qui, compos seulement dun ensemble de fichiers PHP, ne ncessite que quelques minutes dinstallation et de configuration pour une utilisation minimale.
SOMMAIRE
B Tlchargement, installation et configuration initiale
B Premiers pas avec Zend Framework
MOTS-CLS
B tlchargementB paquetageB installationB Subversion
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200822
Zend Framework est un ensemble de fichiers crits en PHP, cest unoutil facile installer et configurer. Il ne vous faudra pas plus de dixminutes pour cette opration. Pour suivre ce chapitre, vous avez besoindune connexion Internet et dun serveur web avec PHP.
La dmarche explique dans ce chapitre permet de mettre en place lesoutils de base qui nous seront utiles pour lapplication exemple. Si vousne connaissez pas du tout Zend Framework, il est important de biensuivre les exemples de ce chapitre.
Tlchargement du paquetageZend Framework est contenu dans un seul paquetage quil suffit de tl-charger et de dployer. Commencez par dterminer un rpertoire dins-tallation. Par exemple :
Windows
Linux
Ensuite, nous devons aller sur le site de Zend Framework, dans la sectionDownload, afin de rcuprer le paquetage correspondant la dernire ver-sion du Framework. http://framework.zend.com est lURL officielle.
C:/www
$ mkdir /www$ cd /www
RAPPEL Configuration minimale
Zend Framework requiert au minimum la version5.1.4 de PHP pour fonctionner. Ses concepteursrecommandent cependant une version de labranche 5.2 de PHP, et nous, auteurs, recomman-dons la dernire version stable de PHP en date. Eneffet, au fur et mesure que Zend Frameworkvolue, il sadapte PHP et certains composantsne fonctionnent alors que partiellement avec desversions de PHP plus anciennes.
Figure 31Tlchargement des paquetages
de Zend Framework
3
Inst
alla
tion
et p
rise
en m
ain
Groupe Eyrolles, 2008 23
Tlchargement sous Windows1 Tlchargez le fichier, mettez-le dans votre rpertoire c:/www.2 Faites un clic droit sur le nom du fichier, puis dcompressez-le.3 Dplacez le rpertoire library dans c:/www et supprimez le reste.
Tlchargement sous UnixSous Unix, tlchargez la dernire version de Zend Framework puisdcompactez-la avec lutilitaire darchivage tar.
Tlchargement et dcompactage de Zend Framework sous Unix
Configuration du serveur ApacheVoil, vous avez maintenant install Zend Framework. Il ne reste plus quconfigurer un serveur Apache avec PHP, de manire le faire fonctionner.
La configuration minimale du framework consiste modifier la directivePHP include_path. Cette directive dtermine les chemins quil fautemprunter pour inclure les fichiers dans PHP avec les appels include* etrequire*.
ditez le fichier php.ini et modifiez la directive include_path :
Windows
Linux
Ensuite, nous allons crer un rpertoire htdocs qui sera visible parApache :
Windows
Linux
$ wget http://url/vers/zend-framework.tar.gz$ tar -xzf zend-framework.tar.gz$ mv zend-framework/library ./$ rm -rf zend-framework
include_path = ".;C:/www/library"
include_path = ".:/www/library"
C:/www/htdocs
$ mkdir /www/htdocs
CONSEIL Dcompresser le paquetage
Si vous ne pouvez pas dcompresser le paquetage,employez lutilitaire 7-zip (http://www.7-zip.org) ou un quivalent, il en existe plein surInternet.
PRATIQUE Paquetages Ubuntu
Depuis sa version 8.04, Ubuntu propose la distri-bution de Zend Framework dans ses dpts depaquets officiels, disponibles avec la commandeapt-get ou loutil Synaptic.
PRREQUIS Apache
Les bases de la configuration dApache et de PHPsont abordes en annexe F. Vous pouvez utilisertout serveur compatible avec PHP, en revanche lapartie MVC ncessite que votre serveur soitcapable dassurer la rcriture dURL(mod_rewrite).
PERFORMANCE include_path
Pour des raisons de performances, nous vous con-seillons de faire apparatre Zend Framework enpremier dans votre include_path, si celui-cidoit comporter dautres chemins.
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200824
Puis, nous devons modifier la configuration Apache pour que le rper-toire racine du serveur HTTP corresponde htdocs. ditez le fichierhttpd.conf puis modifiez la directive DocumentRoot :
Windows
Linux
Redmarrez Apache et le tour est jou, votre framework est install etconfigur !
Tlchargement par le dpt SubversionComme beaucoup de projets open source, Zend Framework est dve-lopp par un ensemble de personnes. Le code source est donc partag etgr par un outil de contrle de versions et demeure librement accessible tous, du moins en lecture.
Il est donc possible daccder aux sources via le dpt Subversion. Cecivous permet de : bnficier de la toute dernire version des sources et donc des der-
niers patchs ; tester vos applicatifs sur une version prcise du framework, gnrale-
ment une version future, dans le but danticiper un changement ven-tuel de compatibilit ;
accessoirement, bnficier des composants futurs durant leur cyclecomplet de dveloppement ;
contribuer ce projet passionnant, auquel cas, bien entendu, vousaurez besoin davoir accs au dpt. ce sujet, consultez http://framework.zend.com/wiki/display/ZFDEV/Contributing+to+Zend+Framework.
Ce type de tlchargement est conseill si vous utilisez dj Subversionpour vos dveloppements. Vous pouvez vous servir de la notiondexternals de Subversion afin de lier le dpt du framework celui devotre application.
Ladresse de la branche principale du dpt Subversion est la suivante :
http://framework.zend.com/svn/framework/standard/trunk
Si seules les sources relatives aux bibliothques du framework (le dossierlibrary) vous intressent, accdez directement lURL suivante :
http://framework.zend.com/svn/framework/standard/trunk/library
DocumentRoot "C:/www/htdocs"
DocumentRoot "/www/htdocs"
PRREQUIS Subversion et Zend Framework
Pour des informations dtailles sur Subversion,ou sur la structure du dpt de Zend Framework,rendez-vous dans lannexe G.
LIRE Subversion
Pour dcouvrir Subversion ou pour approfondirvotre connaissance et votre pratique du contrlede versions, vous pouvez consulter louvragesuivant :R M. Mason, Subversion Pratique du
dveloppement collaboratif avec SVN,Eyrolles, 2006
3
Inst
alla
tion
et p
rise
en m
ain
Groupe Eyrolles, 2008 25
Slectionnez ainsi un dossier, puis faites un clic droit et choisissez SVNCheckout ; entrez ensuite lURL du dpt et validez : le tlchargement com-mence. La figure 3-2 offre un aperu de cette manipulation sous Windows.
Sous Unix, lacquisition du framework via Subversion se fait en uneseule ligne de commande. Placez-vous dans le rpertoire qui contiendrale rpertoire Zend de Zend Framework et tapez la commande adquate :
Acquisition de Zend Framework sous Unix/Linux via Subversion
Premire utilisation du frameworkPour tester Zend Framework, nous allons crer un fichier dans le rper-toire htdocs qui fait appel un des nombreux composants. Crez lefichier test.php dans le rpertoire htdocs :
Windows
Linux
Dans ce fichier, incluez le code PHP suivant :
Ce petit test affiche la date courante avec le composant Zend_Date duframework. Si la date saffiche, cest que votre installation et votre confi-guration sont correctes !
Figure 32Tlchargement de Zend Framework via le dpt Subversion (Windows)
$ cd library$ svn checkout http://framework.zend.com/svn/framework/ X standard/trunk/library
C:/www/htdocs/test.php
$ vi /www/htdocs/test.php
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200826
Voil, nous venons dinstaller et de tester Zend Framework. Cest unebase ncessaire et suffisante pour aborder lensemble des chapitres de cetouvrage. Il vous reste maintenant dcouvrir les nombreuses fonction-nalits et possibilits de modlisation que lon peut mettre en uvre avecZend Framework.
En rsumLe tlchargement et linstallation de Zend Framework sont simples etrapides. Vous trouverez un paquetage sur le site officiel du framework.Vous devez disposer dun serveur HTTP comme Apache et dune confi-guration PHP dont la directive include_path pointe sur le dossier cou-rant . et la racine du framework (dossier Zend). Enfin, il estgalement possible de tlcharger Zend Framework via un dpt dedonnes Subversion disponible sur Internet.
AIDE Forum francophone
Il existe un site communautaire francophone quicomporte de nombreux tutoriels et un forum actifpour poser ses questions et changer. Si vous ren-contrez des difficults dans linstallation du fra-mework, nous vous conseillons daller y faire untour :B http://www.z-f.fr
3
Inst
alla
tion
et p
rise
en m
ain
Groupe Eyrolles, 2008 27
Groupe Eyrolles, 2008
chapitre 4
Groupe Eyrolles, 2008
Composants de base
La connaissance et la matrise de petits outils, parfois insignifiants, peuvent faire la diffrence entre un codeur inefficace et un dveloppeur performant. Cela sappelle la culture, mme si dans le contexte de cet ouvrage elle se trouve rduite au monde informatique.
SOMMAIRE
BMatriser les composants de base
B Configurer les outils essentiels
COMPOSANTS
B Zend_LoaderB Zend_ConfigB Zend_LogB Zend_DebugB Zend_RegistryB Zend_Exceptions
MOTS-CLS
B chargementB auto-chargementB configurationB dbogageB exceptionsB registre
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200830
Les composants proposs dans ce chapitre sont de petite taille. Ils permet-tent daccompagner vos dveloppements de tous les jours en apportant dessolutions pratiques aux problmes courants. Ils ne ncessitent pas darchi-tecture particulire, ils peuvent tre utiliss tels quels dans un fichier PHP.Cest pourquoi nous avons choisi de commencer par leur tude.
Configuration de lenvironnementNous avons vu dans le chapitre prcdent comment installer lenvironne-ment Zend Framework. Nous allons tout simplement nous en servirpour utiliser les composants introduits dans ce chapitre.
Chaque section est ddie un composant et divise en deux parties : une partie exemple qui propose un exemple dutilisation simple et
indpendant de tout le reste ; une partie intgration lapplication qui propose une dmarche dint-
gration du composant au sein de notre projet exemple.
Afin dy gagner en lisibilit, tous les exemples seront stocks dans lerpertoire htdocs/examples :
Crer le rpertoire contenant les exemples (sous Linux)
Le rpertoire contenant les exemples (sous Windows)
Zend_LoaderZend_Loader permet de grer le chargement des classes du rpertoirelibrary. Il est utilis la place du include() ou du require() tradition-nels. Il y a deux manires dutiliser Zend_Loader : le chargement manuel consiste appeler Zend_Loader chaque fois
quon veut se servir dune classe ou dun fichier PHP ; le chargement automatique consiste configurer Zend_Loader pour
quil soit implicitement appel lorsque PHP veut utiliser une classe.On appelle ce procd autoload (auto-chargement).
$ mkdir /www/htdocs/examples$ cd /www/htdocs/examples
C:/www/htdocs/examples
4
Com
posa
nts
de b
ase
Groupe Eyrolles, 2008 31
Lauto-chargement est de plus en plus utilis. Non seulement il est pluspratique, car il vite davoir ajouter des lignes dinclusion, mais il estplus sr et naffecte pas les performances de manire significative dansles versions rcentes de PHP.
Exemple dutilisationDans notre exemple, nous allons dabord utiliser Zend_Loader manuelle-ment pour charger une classe, puis effectuer la dclaration ncessaire un chargement automatique des classes.
Commencez par crer le fichier dexemple :
Sous Linux
Sous Windows
Chargement manuel dune classeImaginons que nous voulons utiliser le composant Zend_View et que noussouhaitions pour cela employer Zend_Loader pour le charger. Voici com-ment faire :
Chargement manuel dune classe
loadClass() peut aussi tre utilise pour nimporte quelle classe respec-tant la convention de noms de Zend Framework. Cette conventionpermet de trouver le fichier dans lequel la classe est dclare. Il faut pourcela remplacer les traits de soulignement (underscores) _ des noms desclasses par des slashs /, et ajouter le suffixe .php. Ainsi Zend_View setrouve dans Zend/View.php. Vous trouverez davantage dinformations ce sujet dans le chapitre 15.
$ cd /www/htdocs/examples$ vi zend_loader.php
C:/www/htdocs/examples/zend_loader.php
// Inclusion du composant Zend_Loaderinclude 'Zend/Loader.php';
// Utilisation de Zend_Loader pour utiliser Zend_ViewZend_Loader::loadClass('Zend_View');
// Cration dun objet Zend_View$view = new Zend_View();var_dump($view);
ALTERNATIVE Inclure un fichier sans classe
Il est aussi possible avec Zend_Loaderdinclure des fichiers, comme nous le ferions avecun include PHP. Pour cela, il suffit dappelerZend_Loader::loadFile() au mme titreque Zend_Loader::loadClass().
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200832
loadFile() est identique un include(), except quelques vrificationssur le nom du fichier afin de dtecter dventuels caractres invalides.
Chargement automatique dune classe (autoload)Le chargement automatique permet dviter dappeler include() ouZend_Loader::loadClass() chaque fois que lon veut utiliser une nou-velle classe. Il faut pour cela quune rgle de conversion soit tablie entrele nom du fichier et celui de la classe sy trouvant. Zend Framework pos-sde une telle convention, comme nous venons de le voir.
Pour activer le chargement automatique, il suffit seulement de spcifierque nous souhaitons auto-charger les classes :
Autoload avec Zend_Loader
Comme nous pouvons le remarquer dans le script prcdent, aucunmoment nous ne faisons appel include() ou Zend_Loader::loadClass() avant dutiliser la nouvelle classe Zend_Date.
Aller plus loin avec Zend_LoaderIl est galement possible dutiliser dautres fonctionnalits deZend_Loader : tester si un fichier existe ou utiliser le chargement auto-matique de classes avec des rgles diffrentes. Voici un exemple dutilisa-tions avances de Zend_Loader :
Utilisation avance, zend_loader_advanced.php
// Inclusion de la classe Zend_Loaderinclude 'Zend/Loader.php';
// Dclaration du chargement automatiqueZend_Loader::registerAutoload();
// Utilisation dune classe sans chargement manuel$date = new Zend_Date();var_dump($date);
4
Com
posa
nts
de b
ase
Groupe Eyrolles, 2008 33
Le rsultat de ce script est illustr sur la figure 4-1.
Bien sr, les deux dernires lignes de lexemple ne peuvent fonctionnersans la cration dun fichier complmentaire contenant la classeMy_Loader. Cette classe doit comporter une mthode statiqueautoload() qui prend en paramtre le nom de la classe charger. Voici lecontenu minimal de ce fichier :
Fichier /www/library/My/Loader.php
// Utilisation dune classe personnalise pour lauto-chargementZend_Loader::registerAutoload('My_Loader');
// Utilisation de Zend_Date avec auto-chargement implicitevar_dump(new Zend_Date());
Figure 41Chargement automatique de classes
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200834
Intgration dans lapplicationZend_Loader se configure souvent dans le bootstrap de lapplication. Voicicomment nous pouvons dclarer lutilisation de Zend_Loader pour uneutilisation manuelle :
Fichier /www/htdocs/index.php
Pour une utilisation automatique, il suffit dajouter la ligne denregistre-ment telle que nous lavons vue dans lexemple prcdent :
Fichier /www/htdocs/index.php
Zend_ConfigLobjectif de Zend_Config est la manipulation de fichiers de configura-tion. Avec ce composant, il est possible dutiliser plusieurs formats destockage ddis aux donnes de configuration : le format ini utilis notamment dans le fichier php.ini qui contient
toutes les directives de configuration de PHP ; le format XML ; et enfin le format PHP lui-mme, si vous souhaitez mettre en place
votre configuration dans un fichier PHP (sous forme de tableau PHP).
4
Com
posa
nts
de b
ase
Groupe Eyrolles, 2008 35
Exemples dutilisationDans cette partie, nous vous proposons un exemple simple dutilisationde Zend_Config pour les trois formats de donnes : INI, XML et PHP.Chaque fichier de configuration comporte deux sections dev et prod quiincluent des directives daccs la base de donnes.
Avec un fichier iniLa gestion dun fichier de configuration au format ini se fait avec laclasse Zend_Config_Ini. Voici ce que contient le fichier deconfiguration :
Fichier zend_config_ini.ini
Pour utiliser ce fichier de configuration, il nous faut crer un objet permet-tant laccs aux directives. Voici comment faire cela avec Zend_Config_Ini :
Fichier zend_config_ini.php
; Directives de configuration de la production
[prod]database.host = dbserverdatabase.user = dbuserdatabase.pass = dbprodpassdatabase.name = dbname
; Directives de configuration de la dev; Ces directives hritent de la production
[dev : prod]database.host = localhostdatabase.pass = dbpass
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200836
Cet exemple affiche les informations illustres sur la figure 4-3.
Comme nous pouvons le voir, le fichier ini est transform parZend_Config_Ini de manire pouvoir lutiliser travers un objet. Cetteclasse effectue deux manipulations essentielles : la mise en place dun hritage entre plusieurs sections ; la possibilit de hirarchiser linformation avec loprateur . dans
les cls de configuration.
Avec un fichier XMLIl est possible dutiliser un fichier XML pour stocker des donnes deconfiguration. Dans ce cas, nous allons utiliser la classeZend_Config_Xml. Voici quoi ressemble le fichier de configuration qui-valent au fichier ini de lexemple prcdent :
Fichier zend_config_xml.xml
Le fichier PHP correspondant ressemble sensiblement celui que nousavons vu lors du prcdent exemple avec le fichier ini. Les dclarationssont les mmes ainsi que lutilisation, la seule chose qui change tantlutilisation de la classe Zend_Config_Xml la place de Zend_Config_Ini :
Figure 43Rsultat du script avec Zend_Config_Ini
dbserver dbuser dbprodpass dbname localhost dbpass
REMARQUE Simplexml_load_file()
Zend_Config_Xml utilise la fonction PHPsimplexml_load_file() pour charger lefichier XML. Celui-ci doit donc tre valide, commelattend la fonction PHP, cest--dire possder uneunique balise racine, tre encod en UTF-8 ou bienprciser un encodage dans la balise XML et res-pecter strictement la syntaxe XML.B http://www.php.net/simplexml-load-file
4
Com
posa
nts
de b
ase
Groupe Eyrolles, 2008 37
Fichier zend_config_xml.php
Le rsultat de la version XML est le mme que celui obtenu avec la syn-taxe ini (voir figure 4-3).
Dans un fichier XML, la hirarchie est donne par limbrication desbalises XML derrire les balises et . Zend_Config_Xml meten place un mcanisme de hirarchie entre et par linter-mdiaire de lattribut extends.
Avec un fichier PHP la base, lutilisation de Zend_Config avec PHP ne contient pas demcanisme automatique pour lhritage de directives, tel que nousvenons de le voir avec XML et INI. Lexemple suivant vous montrecomment utiliser Zend_Config avec PHP, comme la documentation deZend Framework le prconise. Nous vous proposerons par la suite, danslutilisation avance de Zend_Config, une mthode permettant de cons-truire une configuration plus souple et efficace en PHP.
Notre fichier de configuration PHP est tout simplement un tableau dclarer dans un fichier, tel que le montre lexemple suivant :
Fichier zend_config_php.php
database->name . "\n";echo 'Hostname : ' . $config->database->host . "\n";echo 'Username : ' . $config->database->user . "\n";echo 'Password : ' . $config->database->pass . "\n";
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200838
Lutilisation de ce fichier ressemble l aussi, peu de chose prs, ce quenous avons dj vu :
Fichier zend_config.php
Le rsultat est lui aussi semblable celui des exemples prcdents avecXML et INI, comme illustr sur la figure 4-3.
Dans cette mthode, le passage des informations via linclude dans leconstructeur de Zend_Config est un peu original.
Intgration dans notre applicationBien quil soit possible de mettre toute la configuration dans un seul etmme fichier, ceci est peu recommand au point de vue de la lisibilit.Notre application a choisi la solution du fichier ini, et dispose de troisfichiers.
Lobjet Zend_Config peut tre transform en tableau PHP grce lamthode toArray(). Aussi, plusieurs composants de Zend Frameworkrequrant des options de configuration sous forme de tableau PHP accep-tent de mme un objet Zend_Config, cest le cas par exemple de Zend_Db,Zend_Layout, Zend_Controller_Router_Rewrite...
Bootstrap, index.php
database->name . "\n";echo 'Hostname : ' . $config->database->host . "\n";echo 'Username : ' . $config->database->user . "\n";echo 'Password : ' . $config->database->pass . "\n";
$configMain = new Zend_Config_Ini($confPath . '/config.ini', X 'dev');try { $db = Zend_Db::factory($configMain->database); $db->getConnection();// ...
RENVOI Zend_Db
Le composant Zend_Db est abord dans lechapitre 5.
4
Com
posa
nts
de b
ase
Groupe Eyrolles, 2008 39
Fichier config.ini
Voyez comme la mthode factory() de la classe Zend_Db utilise lobjetZend_Config. Nous lui passons la section database, matrialise par$configMain->database et elle se dbrouille ensuite pour trouver les clset les valeurs dans cette section.
Concernant la session, cest peu prs identique, si ce nest quil faut passerun tableau, cette fois-ci, la mthode de la classe concerne. Qu cela netienne, la mthode toArray() de lobjet Zend_Config tombe pic :
Bootstrap, index.php
Fichier session.ini
[app]database.adapter = pdo_mysqldatabase.params.dbname = zfbooklogfile = /logs/log.logmaxreservations = 3
[dev : app]database.params.host = localhostdatabase.params.username = zfbookdatabase.params.password = zfbookdebug = 1
[prod : app]database.params.host = my.prod.hostdatabase.params.username = userdatabase.params.password = secretpass
debug = 0
$configSession = new Zend_Config_Ini($confPath . X '/session.ini', 'dev');Zend_Session::setOptions($configSession->toArray());
[dev]use_cookies = onuse_only_cookies = onuse_trans_sid = offstrict = offremember_me_seconds = 0name = zfbook_sessiongc_divisor = 10gc_maxlifetime = 86400gc_probability = 1save_path = /tmp
RENVOI Zend_Session
Le composant Zend_Session est abord auchapitre 8.
Zend
Fra
mew
ork
- Bie
n d
velo
pper
en
PHP
Groupe Eyrolles, 200840
Zend_LogZend_Log est utile pour faire de la remonte dinformation ou du dbo-gage. Nous lutiliserons pour afficher ou rediriger vers un fichier desmessages derreur, dinformation ou de dbogage.
Quelques notionsAvant dutiliser Zend_Log, il convient de savoir que ce composant utiliseles notions essentielles suivantes : chaque message trait par Zend_Log comporte un niveau de priorit. De
cette manire on peut paramtrer ce quon affiche ou ce quon envoiedans des fichiers en production et en dveloppement ;
le flux de sortie de Zend_Log peut tre redirig soit vers la sortie stan-dard (lcran), soit vers un fichier ou vers nimporte quel composantcapable de traiter ces informations.
Enfin, nous aborderons aussi ces quatre objets importants dans lutilisa-tion de Zend_Log : lenregistreur, instance de Zend_Log, permet de recueillir les messages.
Il peut y en avoir plusieurs, avec des rdacteurs et des filtresdiffrents ;
[prod : dev]remember_me_seconds = 0gc_divisor = 1000gc_maxlifetime = 600gc_probability = 1
Figure 44Diagramme de classes simplifi
du composant Zend_Log
4
Com
posa
nts
de b
ase
Groupe Eyrolles, 2008 41
le rdacteur, qui hrite de Zend_Log_Writer_Abstract, rcupre les