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
-
bechirh favorited this 2 months ago
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 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
- 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
- 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
- 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
- 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
- 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
- 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
- Slide 9: PHP: développer avec Zend Framework Recherche du terme 'Framework' 9
- Slide 10: PHP: développer avec Zend Framework Google impliqué 10
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Slide 18: PHP: développer avec Zend Framework Sommaire 18
- 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
- Slide 20: PHP: développer avec Zend Framework Exemple authentification - - - 20
- 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
- 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
- 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
- Slide 24: PHP: développer avec Zend Framework Modèle MVC - - - - - - - CONTROLLER VIEW MODEL 24
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Slide 35: PHP: développer avec Zend Framework Base de données, exemple ORM 35
- 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
- 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
- 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
- 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
- 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
- Slide 41: PHP: développer avec Zend Framework Questions 41

