Quick Upload

Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
Post to Twitter Post to Twitter
Share on Facebook
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons
« Prev Comments 1 - 1 of 1 Next »
Add a comment If you have a SlideShare account, login to comment; otherwise comment as a guest.
    • angelamaiers
      bechirh favorited this 2 months ago

    Développer en PHP5 avec Zend Framework

    from jpauli, 10 months ago Add as contact

    3941 views | 1 comments | 1 favorites | 1 embeds (Stats)

    Desc:

    Embed customize close
     

    Categories

    Technology

    Groups/Events

    More Info

    This slideshow is Public

    Views: 3941 Comments: 1 Favorites: 1 Downloads: 0

    View Details: 3940 on Slideshare 1 from embeds
    Most viewed embeds (Top 5): More
    All Embeds: Less
    Flagged as inappropriate Flag as inappropriate

    Flag as inappropriate

    Select your reason for flagging this slideshow as inappropriate.

    If needed, use the feedback form to let us know more details.

    Slideshow Transcript

    1. Slide 1: PHP: développer avec Zend Framework PHP5 : Développer avec Zend Framework 1
    2. Slide 2: PHP: développer avec Zend Framework L'intervenant ● Julien PAULI ● Formateur Anaska (Stand E20) ● Membre AFUP ● Membre club developpez.com ● Certifié PHP5 (ZCE) ● Contributeur Zend Framework ● Fondateur communauté ZF francophone http://www.z-f.fr 2
    3. Slide 3: PHP: développer avec Zend Framework Sommaire A: Introduction D: Modèle MVC 1. Description du projet 6. Approche théorique 2. Les communautés 7. Fichier de configuration et démarrage 8. Exemple de contrôleur 9. Exemple de vue B: Apports du ZendFramework 10. Templating 3. Approche glue par composants 4. Standardisation et règles communes E: Gestion d'une base de données 5. Approche via WebServices 11. Connecteurs 12. Requêter un SGBD C: Exemple authentification 13. Gestion de l'ORM F: Conclusions, questions? 3
    4. Slide 4: PHP: développer avec Zend Framework Sommaire A: Introduction D: Modèle MVC 1. Description du projet 6. Approche théorique 2. Les communautés 7. Fichier de configuration et démarrage 8. Exemple de contrôleur 9. Exemple de vue B: Apports du ZendFramework 10. Templating 3. Approche glue par composants 4. Standardisation et règles communes E: Gestion d'une base de données 5. Approche via WebServices 11. Connecteurs 12. Requêter un SGBD C: Exemple authentification 13. Gestion de l'ORM F: Conclusions, questions? 4
    5. Slide 5: PHP: développer avec Zend Framework Introduction - - - - ● Un cadre de travail 100% PHP5 ● PHP 5.1.4 ● ~150.000 lignes de code ● Projet démarré et publié début 2006 (Mars : v0.1.1) ● Premières écritures Octobre 2005 5
    6. Slide 6: PHP: développer avec Zend Framework Introduction - - - - ● Objectifs : ● Travailler plus vite et plus efficacement ● Favoriser l'adoption de PHP en entreprise ● Favoriser les  « bonnes pratiques » de programmation ● Cesser de réinventer la roue ● Garder un esprit open source omniprésent ● Projet open-source (new BSD licence ), piloté par Zend ● Utilisable gratuitement y compris à des fins commerciales 6
    7. Slide 7: PHP: développer avec Zend Framework Introduction - - - - ● 45 composants fonctionnels à ce jour ● Timeline assez longue ● Règles d'intégration strictes ● Tests par PHPUnit obligatoires ● Centaines de contributeurs à travers le monde ● Dont Zend, Google ou encore IBM 7
    8. Slide 8: PHP: développer avec Zend Framework Introduction - - - - ● 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 8
    9. Slide 9: PHP: développer avec Zend Framework Recherche du terme 'Framework' 9
    10. Slide 10: PHP: développer avec Zend Framework Google impliqué 10
    11. Slide 11: PHP: développer avec Zend Framework Communauté francophone ● Projet libre ● communauté ● En interne ● Et en France ? ● http://www.z-f.fr ● Lancé en Mars 2007 ● Forum ● Projets à venir ● Public technique très majoritaire 11
    12. Slide 12: PHP: développer avec Zend Framework Ils l'utilisent ● toutestprojet.fr ● IBM : qedwiki ● eurommaping.com ● phpwishlist ● z-f.fr ● SurforceCMS ● uSVN.info 12
    13. Slide 13: PHP: développer avec Zend Framework Sommaire A: Introduction D: Modèle MVC 1. Description du projet 6. Approche théorique 2. Les communautés 7. Fichier de configuration et démarrage 8. Exemple de contrôleur 9. Exemple de vue B: Apports du ZendFramework 10. Templating 3. Approche glue par composants 4. Standardisation et règles communes E: Gestion d'une base de données 5. Approche via WebServices 11. Connecteurs 12. Requêter un SGBD C: Exemple authentification 13. Gestion de l'ORM F: Conclusions, questions? 13
    14. Slide 14: 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 ● Interfaçage avec des composants externes 14
    15. Slide 15: 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 ● Simple et puissant ● Testabilité 15
    16. Slide 16: PHP: développer avec Zend Framework Des composants pratiques ● Modèle MVC complet ● Composant de base de données très simple ● Table Data Gateway ● ActiveRecord ● Intégration de la technologie de recherche Lucène ● Gestion de l'authentification et des ACL ● Connectivité Javascript / Ajax (JSON) ● Gestion d'emails ● OpenID 16
    17. Slide 17: PHP: développer avec Zend Framework Une approche ouverte vers l'extérieur ● Nombreux connecteurs webServices ● Google ● Youtube ● Picasa ● Docs & Spreadsheets ● Blogger ... ● Yahoo ● Amazon ● Flickr ● Gravatar ● Zend_Rest, Zend_Xmlrpc 17
    18. Slide 18: PHP: développer avec Zend Framework Sommaire 18
    19. Slide 19: PHP: développer avec Zend Framework Sommaire D: Modèle MVC A: Introduction 6. Approche théorique 1. Description du projet 7. Fichier de configuration et démarrage 2. Les communautés 8. Exemple de contrôleur 9. Exemple de vue 10. Templating B: Apports du ZendFramework 3. Approche glue par composants E: Gestion d'une base de données 4. Standardisation et règles communes 11. Connecteurs 5. Approche via WebServices 12. Requêter un SGBD 13. Gestion de l'ORM C: Exemple authentification F: Conclusions, questions? 19
    20. Slide 20: PHP: développer avec Zend Framework Exemple authentification - - - 20
    21. Slide 21: PHP: développer avec Zend Framework Exemple authentification - - - <?php $config = array( 'accept_schemes' => 'basic', 'realm' => 'anaska', ); $adapter = new Zend_Auth_Adapter_Http($config); $basicResolver = new Zend_Auth_Adapter_Http_Resolver_File('auth.txt'); $adapter->setBasicResolver($basicResolver); $adapter->setRequest(new Zend_Controller_Request_Http() ); $adapter->setResponse($response = new Zend_Controller_Response_Http() ); 21
    22. Slide 22: PHP: développer avec Zend Framework Exemple authentification - - - <?php //... $auth = Zend_Auth::getInstance(); // Authentification (et mémorisation en session) $result = $auth->authenticate($adapter)->getIdentity(); // Authentification présente ou réussie ? if ($auth->hasIdentity() || $auth->authenticate($adapter)->isValid()) { $response->setHttpResponseCode(200); $response->appendBody('welcome'); }else{ // echec authentification $response->appendBody('Please, authenticate'); } $response->sendResponse(); 22
    23. Slide 23: PHP: développer avec Zend Framework Sommaire A: Introduction D: Modèle MVC 1. Description du projet 6. Approche théorique 2. Les communautés 7. Fichier de configuration et démarrage 8. Exemple de contrôleur 9. Exemple de vue B: Apports du ZendFramework 10. Templating 3. Approche glue par composants 4. Standardisation et règles communes E: Gestion d'une base de données 5. Approche via WebServices 11. Connecteurs 12. Requêter un SGBD C: Exemple authentification 13. Gestion de l'ORM F: Conclusions, questions? 23
    24. Slide 24: PHP: développer avec Zend Framework Modèle MVC - - - - - - - CONTROLLER VIEW MODEL 24
    25. Slide 25: PHP: développer avec Zend Framework Configuration d'une application [app] db.adapter = pdo_mysql db.params.host = localhost <?php db.params.username = root define('APP_MOD','dev'); // dev ou prod db.params.password = secret db.params.dbname = test // chemin de l'application $appDir = realpath(dirname(dirname(__FILE__))) . '/app'; debug =1 set_include_path($appDir . PATH_SEPARATOR . layout.layout = template get_include_path()); layout.contentKey = contenu // enregistrement de l'autoload [dev : app] require ('Zend/Loader.php'); Zend_Loader::registerAutoload(); [prod : app] db.params.host = my.prod.host // Création de l'objet de configuration db.params.username = user $config = new Zend_Config_Ini($appDir . db.params.password = secretpass '/config/config.ini',APP_MOD); debug =0 logfile = log.txt 25
    26. Slide 26: PHP: développer avec Zend Framework Modèle MVC - - - - - - - ● 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 } } 26
    27. Slide 27: PHP: développer avec Zend Framework Modèle MVC, fichier de démarrage - - - - - - <?php // ... configuration $frontController = Zend_Controller_Front::getInstance(); $frontController->setParam('db',$db); // passage d'un paramètre dans le système MVC $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()); } 27
    28. Slide 28: PHP: développer avec Zend Framework Modèle MVC, un 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('/'); } } 28
    29. Slide 29: PHP: développer avec Zend Framework Modèle MVC, la 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()); // ... 29
    30. Slide 30: PHP: développer avec Zend Framework Modèle MVC, le 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> 30
    31. Slide 31: PHP: développer avec Zend Framework Modèle MVC - - - - - - - ● 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 31
    32. Slide 32: PHP: développer avec Zend Framework Sommaire A: Introduction D: Modèle MVC 1. Description du projet 6. Approche théorique 2. Les communautés 7. Fichier de configuration et démarrage 8. Exemple de contrôleur 9. Exemple de vue B: Apports du ZendFramework 10. Templating 3. Approche glue par composants 4. Standardisation et règles communes E: Gestion d'une base de données 5. Approche via WebServices 11. Connecteurs 12. Requêter un SGBD C: Exemple authentification 13. Gestion de l'ORM F: Conclusions, questions? 32
    33. Slide 33: PHP: développer avec Zend Framework Base de données, création ● Basé sur PDO majoritairement ● Supporte donc Mysql, Oracle, MSSQL, DB2 ... ● LazyConnect ● Transactions implicites (autocommit) ● Ou manuelles ● Profileur intégré <?php $db = Zend_Db::factory('Pdo_Mysql', array( 'host' => '127.0.0.1', 'username' => 'webuser', 'password' => 'very secret password', 'dbname' => 'solutionslinux' )); 33
    34. Slide 34: PHP: développer avec Zend Framework Base 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 34
    35. Slide 35: PHP: développer avec Zend Framework Base de données, exemple ORM 35
    36. Slide 36: PHP: développer avec Zend Framework Base 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)); } } 36
    37. Slide 37: 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(); <?php $Tlivres = new Livres(); $livre = $Tlivres->find('978-2212116762')->current(); Suppression d'un objet métier $livre->delete(); 37
    38. Slide 38: PHP: développer avec Zend Framework Base 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; $membre = $Tmembre->find(9)->current(); $livresEcrits = $membre->findLivresViaEmprunts(); ● Saut à travers les tables 38
    39. Slide 39: PHP: développer avec Zend Framework Sommaire A: Introduction D: Modèle MVC 1. Description du projet 6. Approche théorique 2. Les communautés 7. Fichier de configuration et démarrage 8. Exemple de contrôleur 9. Exemple de vue B: Apports du ZendFramework 10. Templating 3. Approche glue par composants 4. Standardisation et règles communes E: Gestion d'une base de données 5. Approche via WebServices 11. Connecteurs 12. Requêter un SGBD C: Exemple authentification 13. Gestion de l'ORM F: Conclusions, questions? 39
    40. Slide 40: 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 ● Mettre en place des pratiques de conception reconnues ● Design Pattern / UML ● Parler la même langue, avec les mêmes outils ● Ne réinventez pas la roue ● Ne vous répétez pas 40
    41. Slide 41: PHP: développer avec Zend Framework Questions 41