Zend Framework_ Bien Developper en PHP - Julien Pauli(1)

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