Rencontres mondiales du logiciel libre : ZendFramework

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    Rencontres mondiales du logiciel libre : ZendFramework - Presentation Transcript

    1. PHP5 : Développer avec Zend Framework
    2. L'intervenant
      • Julien PAULI
        • Formateur chez Anaska
        • Membre AFUP
        • Membre club developpez.com
        • Certifié PHP5 (ZCE)
        • Contributeur Zend Framework
        • Fondateur communauté ZF francophone http://www.z-f.fr
    3. Anaska
        • L'organisme de formation leader sur l'Open Source en France
        • Plus de 50 cursus inter entreprises
        • 30 intervenants
        • Une présence nationale
    4. Sommaire A: Introduction 1 ] Un Framework ? 2 ] ZendFramework ! 3 ] Ressources & communautés B: Fonctionnalités du ZendFramework 4 ] Approche glue par composants 5 ] Approche via WebServices C: Exemples de composants 6 ] Config 7 ] Log 8 ] Dates D: Gestion d'une base de données 9 ] Connecteurs 10 ] Requêter un SGBD, le CRUD 11 ] Gestion de l'ORM E: Modèle MVC 12 ] Approche théorique 13 ] Exemples (contrôleur, vue ...) 14 ] Templating F: Conclusions, questions?
    5. Constatons ...
    6. Constatons ...
      • Trop de développeurs tentent de recréer ce qui existe déjà
      • Un projet web c'est 40% de développement, 60% de débogage
      • Les spécifications d'un projet changent tout le temps
        • Elles changent même pendant le dév. après confection du CC
      • Trop peu de tests applicatifs
        • Qui teste ici ?
      • Trop de lignes écrites pour trop peu de résultat productif
    7. Arrêtons l'hémorragie :)
    8. Un Framework ?
    9. Un Framework
      • Un cadre de travail
      • Des conventions
        • Pas d'éparpillement des ressources
        • Pied d'égalité pour tout le monde
      • Des composants pré-fabriqués
        • Ne pas réinventer la roue
        • Se pencher sur son objectif métier et non la manière d'y arriver
    10. Il est temps de passer au ZendFramework
      • Un cadre de travail 100% PHP5
        • Testé unitairement avec PHPUnit
      • Dizaines de contributeurs à travers le monde
        • Dont Zend, Google, Microsoft ou encore IBM
      • Projet open-source, piloté par Zend
        • new BSD licence
        • Utilisable gratuitement y compris à des fins commerciales
      • Une cinquantaine de composants (orientés objet)
        • Zend_Auth – Zend_Controller – Zend_Translate – Zend_Layout – Zend_XmlRpc – Zend_Search_Lucene – Zend_Ldap - ...
      Zend Framework en bref
    11. Zend Framework : contributions
      • Contributeurs enregistrés : >400
      • Contributeurs professionnels
      • 140.000 lignes de code PHP
      • 01-Mar-2008 : plus de 4.000.000 de téléchargements
      • Travailler plus vite et plus efficacement
      • Favoriser l'adoption de PHP en entreprise
        • Industrialisation de PHP
        • Règles de gestion de projets communes
      • Favoriser les  « bonnes pratiques » de programmation
        • Design Patterns
        • Génie logiciel
      • Cesser de réinventer la roue
      Objectifs de Zend Framework
    12. Ressources autour de ZendFramework
      • Portail et forge complète
        • Forum, bugtracker, wiki, canal IRC, dépôt SVN ...
      • Manuel clair et complet
        • Traduit dans plusieurs langues
        • Exemples concrêts, simples et compréhensibles
      • Nombreux tutoriaux
        • developpez.com - kitpages.fr – zftutorials.com
      • Livres
        • ZendFramework in Action – Guide to programming with ZF
        • Bientôt une référence francophone :)
    13. Communauté francophone
      • http://www.z-f.fr
        • Lancé en Mars 2007
        • Forum
        • Entre-aides
        • Projets à venir
      • Public technique très majoritaire
      • Offres d'emploi
    14. Ils l'utilisent
      • toutestprojet.fr
      • phpwishlist
      • IBM : qedwiki
      • eurommaping.com
      • phpwishlist
      • z-f.fr
      • SurforceCMS
      • uSVN.info
      • Magentoo
    15. Sommaire A: Introduction 1 ] Un Framework ? 2 ] ZendFramework ! 3 ] Ressources & communautés B: Fonctionnalités du ZendFramework 4 ] Approche glue par composants 5 ] Approche via WebServices C: Exemples de composants 6 ] Config 7 ] Log 8 ] Dates D: Gestion d'une base de données 9 ] Connecteurs 10 ] Requêter un SGBD, le CRUD 11 ] Gestion de l'ORM E: Modèle MVC 12 ] Approche théorique 13 ] Exemples (contrôleur, vue ...) 14 ] Templating F: Conclusions, questions?
    16. Fonctionnalités du ZendFramework
    17. Une approche « glue »
      • Indépendance des composants
        • Couplage interne faible
          • Similitudes PEAR
          • Quelques syntaxes empruntées à Rails / Java
          • 'Time To Adopot' libre et graduel
      • Flexibilité & étendabilité
        • Abstractions omniprésentes
        • Interfaces
      • Interconnexion avec des composants externes simple
    18. Une approche PHP
      • Simplicité, esprit PHP conservé et ressenti
      • PHP + bonnes pratiques
          • UML, design patterns, génie logiciel
          • Style de codage – Ligne directrice
          • Dont Reapeat Yourself – Dont Reinvent the Wheel
          • Modèle MVC présent
      • En deux mots : Simple et puissant (comme PHP ;-) )
      • Répond à 80% des besoins web dits « classiques »
    19. Des composants utiles
      • Modèle MVC complet
        • FrontController – Router – Plugins – Helpers ...
      • Composant de base de données très simple
      • Intégration de la technologie de recherche Lucène (ApacheGroup)
      • Gestion de l'authentification et des ACL
      • Connectivité Javascript / Ajax : Dojo ou autre
      • Gestion d'emails
      • OpenID, LDAP, InfoCard, ...
    20. Sommaire
    21. Une approche services Webs
      • Nombreux connecteurs webServices
        • Google
          • Youtube
          • Picasa
          • Docs & Spreadsheets
          • Blogger ...
        • Yahoo
        • Amazon
        • Flickr
        • Gravatar
        • Slideshare
        • Simpy ...
      • Zend_Rest, Zend_Xmlrpc
      simpy del.icio.us
    22. Google impliqué
    23. Sommaire A: Introduction 1 ] Un Framework ? 2 ] ZendFramework ! 3 ] Ressources & communautés B: Fonctionnalités du ZendFramework 4 ] Approche glue par composants 5 ] Approche via WebServices C: Exemples de composants 6 ] Config 7 ] Log 8 ] Dates D: Gestion d'une base de données 9 ] Connecteurs 10 ] Requêter un SGBD, le CRUD 11 ] Gestion de l'ORM E: Modèle MVC 12 ] Approche théorique 13 ] Exemples (contrôleur, vue ...) 14 ] Templating F: Conclusions, questions?
    24. Exemples de composants
    25. Configuration <?php $config = new Zend_Config_Ini( 'config.ini' ); echo $config ->mysection->foo->bar // mytext [mysection] foo.bar = mytext config.ini
    26. Configuration <?php $config = new Zend_Config_Ini( 'config.ini' , 'mysection' ); echo $config ->foo->bar // sometext [global] foo.bar = somevalue [mysection : global] foo.bar = sometext config.ini
      • Héritage des sections
    27. Log <?php $config = new Zend_Config_Ini( 'config.ini' , 'dev' ); $support = ( $config ->debug == 0 ) ? $config ->logfile : 'php://output' ; try { $writer = new Zend_Log_Writer_Stream( $support ); // composant log qui va nous suivre $log = new Zend_log( $writer ); } catch (Zend_Log_Exception $e ) { exit ( 'Erreur fatale' ); } // ... par exemple plus tard $log ->warn( 'Problème' ); $log ->info( 'Une information' ); 2008-06-09T12:08:11+02:00 WARN (4): Problème 2008-06-09T12:08:11+02:00 INFO (6): Une information [app] [dev : app] debug = 1 [prod : app] debug = 0 logfile = logfile
    28. Log <?php // ... $writer = new Zend_Log_Writer_Stream( $support ); // composant log qui va nous suivre $log = new Zend_log( $writer ); $writer ->setFormatter( new Zend_Log_Formatter_Xml()); // ... par exemple plus tard $log ->warn( 'Problème' ); <logEntry> <timestamp>2008-06-09T12:34:39+02:00</timestamp> <message>Problème</message><priority>4</priority><priorityName>WARN</priorityName> </logEntry>
    29. Feeds , RSS, Atom ... <?php $rss = Zend_Feed::findFeeds( 'http://www.clubic.com' ); foreach ( $rss as $myrss ) { printf ( &quot;%s possède %d entrées &quot; , $myrss ->title,count( $myrss ->item())); } <?php $rss = Zend_Feed::import( 'http://www.clubic.com/xml/article.xml' ); printf ( &quot;<a href=%s>%s</a><br>&quot; , $rss ->link, $rss ->title); foreach ( $rss as $item ) { printf ( &quot;<a href=%s>%s</a><br>&quot; , $item ->link, $item ->title); } Clubic.com - Actualités possède 50 entrées Clubic.com - Articles / Tests / Dossiers possède 50 entrées Clubic.com - Demos de Jeux possède 50 entrées Clubic.com - Patch de jeux possède 50 entrées Clubic.com - Logithèque Windows possède 50 entrées Clubic.com - Logithèque Mac possède 50 entrées Clubic.com - Logithèque Palm OS possède 50 entrées Clubic.com - Logithèque Windows Mobile possède 50 entrées
    30. Les dates <?php $date = new Zend_Date( '06/10/2004 11h47' , false , 'fr_FR' ); // après Jésus-Christ, mercredi 06 octobre 04 à 11:47 echo $date ->toString( &quot;GGGG, EEEE dd MMMM yy à hh:mm&quot; ); print_r (Zend_Date_Cities :: City( 'Paris' )); /* Array( [latitude] => 48.8666667 [longitude] => 2.3333333 [horizon] => ) */ $date = new Zend_Date( '12/18/1882' ); $date ->addHour( 3 ); // ajoutons 3 heures echo $date ->get(Zend_Date :: TIMES); // 03:00:00
    31. Sommaire A: Introduction 1 ] Un Framework ? 2 ] ZendFramework ! 3 ] Ressources & communautés B: Fonctionnalités du ZendFramework 4 ] Approche glue par composants 5 ] Approche via WebServices C: Exemples de composants 6 ] Config 7 ] Log 8 ] Dates D: Gestion d'une base de données 9 ] Connecteurs 10 ] Requêter un SGBD, le CRUD 11 ] Gestion de l'ORM E: Modèle MVC 12 ] Approche théorique 13 ] Exemples (contrôleur, vue ...) 14 ] Templating F: Conclusions, questions?
    32. Gestion des bases de données
    33. Bases de données, généralités <?php $db = Zend_Db :: factory( 'Pdo_Mysql' , array ( 'host' => '127.0.0.1' , 'username' => 'webuser' , 'password' => 'very secret password' , 'dbname' => 'rmll2k8' ));
      • Supporte Mysql, Oracle, MSSQL, DB2, SQLite, PGSql ...
      • Transactions implicites (autocommit)
        • Ou manuelles
      • Profileur intégré
      • CRUDeur intégré
      • ORM maison
        • ActiveRecord – Table Data Gateway
    34. Bases de données, exemple
    35. Bases de données, sélections <?php $select = $db ->select()->from( array ( 'e' => 'emprunts' ), 'date' ) ->join( array ( 'm' => 'membres' ), 'e.membre=m.num' , 'nom' ) ->join( array ( 'l' => 'livres' ), 'e.livre=l.isbn' , 'titre' ) ->where( 'm.num > ?' , 1 ) ->group( 'e.date' ) ->order( array ( 'm.num DESC' , 'e.date ASC' )) ->limit( 0 , 10 ); echo $select ; //SELECT `e`.`date`, `m`.`nom`, `l`.`titre` FROM `emprunts` AS `e` INNER JOIN `membres` AS `m` ON e.membre=m.num INNER JOIN `livres` AS `l` ON e.livre=l.isbn WHERE (m.num > 1) GROUP BY `e`.`date` ORDER BY `m`.`num` DESC, `e`.`date` ASC LIMIT 0,10
    36. Bases de données, définition ORM <?php class Livres extends Zend_Db_Table { protected $_primary = 'isbn' ; protected $_sequence = false ; } <?php class Emprunts extends Zend_Db_Table { protected $_primary = array ( 'membre' , 'livre' ); protected $_referenceMap = array ( 'livreemprunte' => array ( 'columns' => array ( 'livre' ), 'refTableClass' => 'Livres' , ), 'emprunteur' => array ( 'columns' => array ( 'membre' ), 'refTableClass' => 'Membres' , )); public function findByDate( $date ) { return $this ->fetchAll( $this ->getAdapter() ->quoteInto( 'date = ?' , $date )); } } Nom de la table Liaisons entre tables Clé non autoincrémentée Clé primaire multiple
    37. Base de données, utilisation ORM <?php $Tlivres = new Livres(); $livre = $Tlivres ->createRow(); $livre ->isbn = '765-1122334455' ; $livre ->titre = 'Zend Framework en puissance' ; $livre ->auteur = 'Julien PAULI' ; $livre ->save(); <?php $Tlivres = new Livres(); $livre = $Tlivres ->find( '978-2212116762' )->current(); $livre ->delete(); Création d'un objet métier Récupération par PK Persistance Suppression
    38. Bases de données, ORM, relations <?php $Temprunt = new Emprunts(); $emprunts = $Temprunt ->findByDate( '2007-11-27' ); foreach ( $emprunts as $emprunt ) { echo &quot; { $emprunt ->findParentLivres()->titre} a été emprunté par { $emprunt ->findParentMembres()->nom} &quot; ; } <?php $Tmembre = new Membres; $membre9 = $Tmembre ->find( 9 )->current(); $livresEcrits = $membre9 ->findLivresViaEmprunts();
    39. Sommaire A: Introduction 1 ] Un Framework ? 2 ] ZendFramework ! 3 ] Ressources & communautés B: Fonctionnalités du ZendFramework 4 ] Approche glue par composants 5 ] Approche via WebServices C: Exemples de composants 6 ] Config 7 ] Log 8 ] Dates D: Gestion d'une base de données 9 ] Connecteurs 10 ] Requêter un SGBD, le CRUD 11 ] Gestion de l'ORM E: Modèle MVC 12 ] Approche théorique 13 ] Exemples (contrôleur, vue ...) 14 ] Templating F: Conclusions, questions?
    40. Modèle MVC MODEL VIEW CONTROLLER
    41. Modèle MVC : routage
      • Routage automatique :
        • http://myApp/membres/liste/order/name
      <?php class MembresController extends Zend_Controller_Action { public function listeAction() { $this ->view->order = $this ->_getParam( 'order' ); // name } }
    42. Modèle MVC : démarrage <?php // ... configuration $frontController = Zend_Controller_Front :: getInstance(); $frontController ->setParam( 'db' , $db ); // passage d'un paramètre quelconque $frontController ->throwExceptions( true ); Zend_Layout :: startMvc( $config ->layout); // configuration du templating $frontController ->setControllerDirectory( $appDir . '/controllers' ); try { $frontController ->dispatch(); // dispatche ! } catch (Exception $e ){ $log ->emerg( $e ->getMessage()); }
    43. Modèle MVC : contrôleur <?php public function indexAction() { $auth = Zend_Auth :: getInstance(); if ( $auth ->hasIdentity()) { $this ->_redirect( '/' ); } $adapter = new Zend_Auth_Adapter_DbTable( $someConfig ); $adapter ->setIdentity( $this ->_getParam( 'login' )) ->setCredential( $this ->_getParam( 'password' )); $result = $auth ->authenticate( $adapter ); if (! $result ->isValid()) { $this ->_flashMessenger( 'authentification failed' ); $this ->_forward( 'error' ); return ; } else { Zend_Session :: regenerateId(); $this ->_redirect( '/' ); } }
    44. Modèle MVC : vue <?php $request = Zend_Controller_Front :: getInstance()->getRequest(); echo $this ->doctype( 'XHTML1_STRICT' ), $this ->headLink()->appendStylesheet( '/styles/basic.css' ) ->headLink( array ( 'rel' => 'favicon' , 'href' => '/img/favicon.ico' ), 'PREPEND' ) ->prependStylesheet( '/styles/moz.css' , 'screen' , true ), $this ->headMeta()->appendName( 'keywords ' , 'framework php solutionslinux' ) ->appendHttpEquiv( 'expires' , 'Wed, 26 Feb 1997 08:21:57 GMT' ) ->appendHttpEquiv( 'pragma' , 'no-cache' ) ->appendHttpEquiv( 'Cache-Control' , 'no-cache' ), $this ->headScript()->appendFile( '/js/prototype.js' ) ->appendScript( $onloadScript ), $this ->headStyle()->appendStyle( $styles ), $this ->headTitle( $request ->getActionName()) ->headTitle( $request ->getControllerName()); // ...
    45. Modèle MVC : template <table border='1' cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot; height=&quot;100%&quot;> <tr> <td colspan=&quot;3&quot; align=&quot;center&quot;> <?php echo $this ->layout()->header ?> </td> </tr> <tr> <td width=&quot;20%&quot;> <?php echo $this ->action( 'gauche' , 'login' ) ?> </td> <td> <?php echo $this ->layout()->contenu ?> </td> <td width=&quot;20%&quot;> <?php echo $this ->layout()->droite ?> </td> </tr> <tr> <td colspan=&quot;3&quot; align=&quot;center&quot;> <?php echo $this ->layout()->footer ?> </td> </tr> </table>
    46. Modèle MVC : en bref
      • Facultatif ... !?
        • Time To Adopt libre ;-)
      • Très flexible, très modulaire
        • Très personnalisable
            • Routeur -> SEO
            • Filtres I/O
      • Système de Plugins & helpers
      • Dérivation de classe simple
    47. Sommaire A: Introduction 1 ] Un Framework ? 2 ] ZendFramework ! 3 ] Ressources & communautés B: Fonctionnalités du ZendFramework 4 ] Approche glue par composants 5 ] Approche via WebServices C: Exemples de composants 6 ] Config 7 ] Log 8 ] Dates D: Gestion d'une base de données 9 ] Connecteurs 10 ] Requêter un SGBD, le CRUD 11 ] Gestion de l'ORM E: Modèle MVC 12 ] Approche théorique 13 ] Exemples (contrôleur, vue ...) 14 ] Templating F: Conclusions, questions?
    48. Conclusions
      • Travaillez à votre rythme
        • Zend Framework ne vous force en rien
          • Couplage lâche
          • Composants
      • Utilisez le à 100% si vous le désirez
      • Mettez en place des pratiques de conception reconnues
        • Design Pattern / UML
        • Politique de tests et de gestion de la qualité logicielle
      • Parlez la même langue, avec les mêmes outils
        • Ne réinventez pas la roue
        • Ne vous répétez pas, ne dupliquez pas
    49. Questions

    + AlterWayAlterWay, 2 years ago

    custom

    1516 views, 2 favs, 0 embeds more stats

    Rencontres mondiales du logiciel libre : ZendFramew more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1516
      • 1516 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories