Slideshare.net (beta)

 

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 0 (more)

Rencontres mondiales du logiciel libre : ZendFramework

From jpauli, 1 month ago

Rencontres mondiales du logiciel libre : ZendFramework

267 views  |  0 comments  |  0 favorites
Download not available ?
 

Groups / Events

 

 
Embed
options

More Info

This slideshow is Public
Total Views: 267
on Slideshare: 267
from embeds: 0

Slideshow transcript

Slide 1: PHP: développer avec Zend Framework PHP5 : Développer avec Zend Framework 1

Slide 2: PHP: développer avec Zend Framework 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 2

Slide 3: PHP: développer avec Zend Framework Anaska ● L'organisme de formation leader sur l'Open Source en France ● Plus de 50 cursus inter entreprises ● 30 intervenants ● Une présence nationale 3

Slide 4: PHP: développer avec Zend Framework Sommaire A: Introduction D: Gestion d'une base de données 1 ] Un Framework ? 9 ] Connecteurs 2 ] ZendFramework ! 10 ] Requêter un SGBD, le CRUD 3 ] Ressources & communautés 11 ] Gestion de l'ORM B: Fonctionnalités du ZendFramework E: Modèle MVC 4 ] Approche glue par composants 12 ] Approche théorique 5 ] Approche via WebServices 13 ] Exemples (contrôleur, vue ...) 14 ] Templating C: Exemples de composants 6 ] Config F: Conclusions, questions? 7 ] Log 8 ] Dates 4

Slide 5: PHP: développer avec Zend Framework Constatons ... 5

Slide 6: PHP: développer avec Zend Framework 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 6

Slide 7: PHP: développer avec Zend Framework Arrêtons l'hémorragie :) 7

Slide 8: PHP: développer avec Zend Framework Un Framework ? 8

Slide 9: PHP: développer avec Zend Framework 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 9

Slide 10: PHP: développer avec Zend Framework Il est temps de passer au ZendFramework 10

Slide 11: PHP: développer avec Zend Framework Zend Framework en bref ● 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 - ... 11

Slide 12: PHP: développer avec Zend Framework 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 12

Slide 13: PHP: développer avec Zend Framework Objectifs de Zend Framework ● 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 13

Slide 14: PHP: développer avec Zend Framework 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 :) 14

Slide 15: PHP: développer avec Zend Framework Communauté francophone ● http://www.z-f.fr ● Lancé en Mars 2007 ● Forum ● Entre-aides ● Projets à venir ● Public technique très majoritaire ● Offres d'emploi 15

Slide 16: PHP: développer avec Zend Framework Ils l'utilisent ● toutestprojet.fr ● phpwishlist ● IBM : qedwiki ● eurommaping.com ● phpwishlist ● z-f.fr ● SurforceCMS ● uSVN.info ● Magentoo 16

Slide 17: PHP: développer avec Zend Framework Sommaire A: Introduction D: Gestion d'une base de données 1 ] Un Framework ? 9 ] Connecteurs 2 ] ZendFramework ! 10 ] Requêter un SGBD, le CRUD 3 ] Ressources & communautés 11 ] Gestion de l'ORM B: Fonctionnalités du ZendFramework E: Modèle MVC 4 ] Approche glue par composants 12 ] Approche théorique 5 ] Approche via WebServices 13 ] Exemples (contrôleur, vue ...) 14 ] Templating C: Exemples de composants 6 ] Config F: Conclusions, questions? 7 ] Log 8 ] Dates 17

Slide 18: PHP: développer avec Zend Framework Fonctionnalités du ZendFramework 18

Slide 19: PHP: développer avec Zend Framework 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 19

Slide 20: PHP: développer avec Zend Framework 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 » 20

Slide 21: PHP: développer avec Zend Framework 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, ... 21

Slide 22: PHP: développer avec Zend Framework Sommaire 22

Slide 23: PHP: développer avec Zend Framework Une approche services Webs ● Nombreux connecteurs webServices ● Google ● Youtube ● Picasa ● Docs & Spreadsheets ● Blogger ... ● Yahoo ● Amazon ● Flickr ● Gravatar ● Slideshare ● Simpy ... simpy del.icio.us ● Zend_Rest, Zend_Xmlrpc 23

Slide 24: PHP: développer avec Zend Framework Google impliqué 24

Slide 25: PHP: développer avec Zend Framework Sommaire A: Introduction D: Gestion d'une base de données 1 ] Un Framework ? 9 ] Connecteurs 2 ] ZendFramework ! 10 ] Requêter un SGBD, le CRUD 3 ] Ressources & communautés 11 ] Gestion de l'ORM B: Fonctionnalités du ZendFramework E: Modèle MVC 4 ] Approche glue par composants 12 ] Approche théorique 5 ] Approche via WebServices 13 ] Exemples (contrôleur, vue ...) 14 ] Templating C: Exemples de composants 6 ] Config F: Conclusions, questions? 7 ] Log 8 ] Dates 25

Slide 26: PHP: développer avec Zend Framework Exemples de composants 26

Slide 27: PHP: développer avec Zend Framework Configuration <?php $config = new Zend_Config_Ini('config.ini'); echo $config->mysection->foo->bar // mytext config.ini [mysection] foo.bar = mytext 27

Slide 28: PHP: développer avec Zend Framework Configuration <?php $config = new Zend_Config_Ini('config.ini','mysection'); echo $config->foo->bar // sometext config.ini [global] foo.bar = somevalue ● Héritage des sections [mysection : global] foo.bar = sometext 28

Slide 29: PHP: développer avec Zend Framework Log <?php $config = new Zend_Config_Ini('config.ini','dev'); $support = ($config->debug == 0) ? $config->logfile : 'php://output'; try { [app] $writer = new Zend_Log_Writer_Stream($support); [dev : app] // composant log qui va nous suivre debug = 1 $log = new Zend_log($writer); } catch(Zend_Log_Exception $e) { [prod : app] exit('Erreur fatale'); debug = 0 } logfile = logfile // ... 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 29

Slide 30: PHP: développer avec Zend Framework 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> 30

Slide 31: PHP: développer avec Zend Framework Feeds , RSS, Atom ... <?php $rss = Zend_Feed::findFeeds('http://www.clubic.com'); foreach ($rss as $myrss) { printf("%s possède %d entrées n",$myrss->title,count($myrss->item())); } 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 <?php $rss = Zend_Feed::import('http://www.clubic.com/xml/article.xml'); printf("<a href=%s>%s</a><br>",$rss->link,$rss->title); foreach ($rss as $item) { printf("<a href=%s>%s</a><br>",$item->link,$item->title); } 31

Slide 32: PHP: développer avec Zend Framework 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("GGGG, EEEE dd MMMM yy à hh:mm"); 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 32

Slide 33: PHP: développer avec Zend Framework Sommaire A: Introduction D: Gestion d'une base de données 1 ] Un Framework ? 9 ] Connecteurs 2 ] ZendFramework ! 10 ] Requêter un SGBD, le CRUD 3 ] Ressources & communautés 11 ] Gestion de l'ORM B: Fonctionnalités du ZendFramework E: Modèle MVC 4 ] Approche glue par composants 12 ] Approche théorique 5 ] Approche via WebServices 13 ] Exemples (contrôleur, vue ...) 14 ] Templating C: Exemples de composants 6 ] Config F: Conclusions, questions? 7 ] Log 8 ] Dates 33

Slide 34: PHP: développer avec Zend Framework Gestion des bases de données 34

Slide 35: PHP: développer avec Zend Framework Bases de données, généralités ● Supporte Mysql, Oracle, MSSQL, DB2, SQLite, PGSql ... ● Transactions implicites (autocommit) ● Ou manuelles <?php ● Profileur intégré $db = Zend_Db::factory('Pdo_Mysql', array( 'host' => '127.0.0.1', ● CRUDeur intégré 'username' => 'webuser', 'password' => 'very secret password', 'dbname' => 'rmll2k8' ● ORM maison )); ● ActiveRecord – Table Data Gateway 35

Slide 36: PHP: développer avec Zend Framework Bases de données, exemple 36

Slide 37: PHP: développer avec Zend Framework 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 37

Slide 38: PHP: développer avec Zend Framework Bases de données, définition ORM <?php <?php class Livres extends Zend_Db_Table class Emprunts extends Zend_Db_Table { { protected $_primary = 'isbn'; protected $_primary = array('membre','livre'); protected $_sequence = false; } protected $_referenceMap = array( Clé non autoincrémentée 'livreemprunte' => array( 'columns' => array('livre'), 'refTableClass' => 'Livres', Nom de la table ), 'emprunteur' => array( 'columns' => array('membre'), Clé primaire multiple 'refTableClass' => 'Membres', )); public function findByDate($date) { Liaisons entre tables return $this->fetchAll($this->getAdapter() ->quoteInto('date = ?',$date)); } } 38

Slide 39: PHP: développer avec Zend Framework Base de données, utilisation ORM <?php $Tlivres = new Livres(); $livre = $Tlivres->createRow(); Création d'un objet métier $livre->isbn = '765-1122334455'; $livre->titre = 'Zend Framework en puissance'; $livre->auteur = 'Julien PAULI'; $livre->save(); Persistance Récupération par PK <?php $Tlivres = new Livres(); $livre = $Tlivres->find('978-2212116762')->current(); $livre->delete(); Suppression 39

Slide 40: PHP: développer avec Zend Framework Bases de données, ORM, relations <?php $Temprunt = new Emprunts(); $emprunts = $Temprunt->findByDate('2007-11-27'); foreach ($emprunts as $emprunt) { echo "{$emprunt->findParentLivres()->titre} a été emprunté par {$emprunt->findParentMembres()->nom}"; } <?php $Tmembre = new Membres; $membre9 = $Tmembre->find(9)->current(); $livresEcrits = $membre9->findLivresViaEmprunts(); 40

Slide 41: PHP: développer avec Zend Framework Sommaire A: Introduction D: Gestion d'une base de données 1 ] Un Framework ? 9 ] Connecteurs 2 ] ZendFramework ! 10 ] Requêter un SGBD, le CRUD 3 ] Ressources & communautés 11 ] Gestion de l'ORM B: Fonctionnalités du ZendFramework E: Modèle MVC 4 ] Approche glue par composants 12 ] Approche théorique 5 ] Approche via WebServices 13 ] Exemples (contrôleur, vue ...) 14 ] Templating C: Exemples de composants 6 ] Config F: Conclusions, questions? 7 ] Log 8 ] Dates 41

Slide 42: PHP: développer avec Zend Framework Modèle MVC CONTROLLER VIEW MODEL 42

Slide 43: PHP: développer avec Zend Framework 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 } } 43

Slide 44: PHP: développer avec Zend Framework 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()); } 44

Slide 45: PHP: développer avec Zend Framework 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('/'); } } 45

Slide 46: PHP: développer avec Zend Framework 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()); // ... 46

Slide 47: PHP: développer avec Zend Framework Modèle MVC : template <table border='1' cellpadding="0" cellspacing="0" width="100%" height="100%"> <tr> <td colspan="3" align="center"><?php echo $this->layout()->header ?></td> </tr> <tr> <td width="20%"><?php echo $this->action('gauche','login') ?></td> <td><?php echo $this->layout()->contenu?></td> <td width="20%"><?php echo $this->layout()->droite?></td> </tr> <tr> <td colspan="3" align="center"><?php echo $this->layout()->footer ?></td> </tr> </table> 47

Slide 48: PHP: développer avec Zend Framework 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 48

Slide 49: PHP: développer avec Zend Framework Sommaire A: Introduction D: Gestion d'une base de données 1 ] Un Framework ? 9 ] Connecteurs 2 ] ZendFramework ! 10 ] Requêter un SGBD, le CRUD 3 ] Ressources & communautés 11 ] Gestion de l'ORM B: Fonctionnalités du ZendFramework E: Modèle MVC 4 ] Approche glue par composants 12 ] Approche théorique 5 ] Approche via WebServices 13 ] Exemples (contrôleur, vue ...) 14 ] Templating C: Exemples de composants 6 ] Config F: Conclusions, questions? 7 ] Log 8 ] Dates 49

Slide 50: PHP: développer avec Zend Framework 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 50

Slide 51: PHP: développer avec Zend Framework Questions 51