PHP5: Développement avec  Zend Framework The PHP framework leader for  Web application developement Présenté par Ndjido  Ardo BAR [email_address]
Sommaire Généralités sur PHP Les nouveautés sur PHP5 PHP5 et le paradigme objet Les Design Patterns Introduction au Zend Framework Présentation de quelques classes L’architecture MVC Moteur de Template Conclusion mardi 2 juin 2009 Zend Framework    Présenté par Ndjido Ardo BAR | Page
GÉNÉRALITÉS SUR PHP mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Généralités sur PHP—HISTORIQUE 1/2 PHP signifie PHP Hypertext Preprocessor La première version de php est créée en perl par  Rasmus Lerdorf en 1994. Cette version était destinée à une utilisation personnelle. Par suite elle est étendue à php/FI avec l’addition du package Form Interpreter. En 1997 deux étudiants du nom de Zeev Surastki et Andy Gutmans créent un nouveau parseur en c pour php. Ce qui donne naissance à PHP3. En 2003 sort la version 4 de php avec un nouveau moteur (Zend Engine) qui marche sur plusieurs serveurs web autre que Apache. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Généralités sur PHP—HISTORIQUE 2/2 Actuellement, php est maintenue par l’entreprise Zend avec une équipe dynamique de développeurs. Zend développe aussi la plateforme Zend Framework et l’environnement de développement Zend IDE.  En plus de respecter davantage le paradigme Object (classe, message, exception…), PHP5 apporte des nouveautés telle que la base de données embarquée SqLite, php6 s’annonce avec beaucoup de fonctions orientées WEB 2.0  mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Généralités sur PHP—Caractéristique 1/1 PHP est langage qui s’exécute coté serveur Il est interprété par le Zend Engine, par opposition aux langage compilé comme le c PHP est indépendant de la plateforme PHP est open source, (code source accessible sur le net) PHP est un langage extensible mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Généralités sur PHP– Fonctionnement 1/1 mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  L’architecture CLIENT/SERVEUR
Généralités sur PHP—Avantages de php PHP est très facile à apprendre PHP dispose d’une documentation énorme à travers les forums, les sites spécialisés, les mailling liste… PHP étant open source dispose d’un système efficace de détection de bugs PHP supporte une large variété de SGBD (MySql, Oracle, Posgresql…) On peut aussi bien développer en procédural qu’avec le paradigme objet On trouve de nombreuses application développées en php: jOOMLA, phpBB… mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Généralités sur PHP—Faiblesses 1/1 PHP est faiblement typé  Exemple: le code suivant ne génère pas d’erreur  <?php  $var = array();  $var = ’11ESD’;  ?> Problème de sécurité:  exemple  injection sql Existence de code amateur sur le net Mauvaise pratique du développement avec php4 (spaghetti code dû au mélange de codes php et html) mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
PHP 5 : LES NOUVEAUTÉS mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Nouveautés sur PHP5 1/2 Le paradigme objet Le nouveau model objet implémente des méthodes spécifiques Exemple: __construct(); __get(); __set()… Gestion des exceptions Existence d’Interfaces => Polymorphisme Héritage SQLITE Sqlite est une simulation de base de donnée à travers des fichiers plats. Son avantage est de pouvoir utiliser du SQL sur des fichiers. Il hérite toutefois des faiblesses des fichiers c’est-à-dire le manque de sécurité et le nombre limité de données pouvant être stocker  mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Nouveautés sur PHP5 2/2 SimpleXML permet d’interpréter des fichiers xml d’une manière très simple. Une nouvelle version de l’interface DOM qui permet de manipuler les fichiers xml. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
PHP 5 & LE PARADIGME OBJET  mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Le paradigme Objet 1/5 Un objet est une entité cohérente rassemblant des données et du code travaillant sur ses données.  Une classe peut être considérée somme un moule à partir duquel on peut créer des objets. La notion de classe  peut être considérée comme une expression de la notion de classe d’équivalence chère aux mathématiciens. Les classes sont la  méta donnée  des objets. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Le paradigme Objet 2/5 Une classe décrit la structure interne d’un objet. Elle encapsule les données et les actions qu’il est capable d’effectuer sur celles-ci. L’instanciation  est l’opération qui permet de créer une objet à partir d’une classe. Exemple: mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  # itsRadius : double # itsCenter : Point CIRCLE + Area() : double + Circumference(): double + SetCenter(Point) + SetRadius() Classe Instances itsRadius = 2,7 itsCenter  = (2;1) itsRadius = 2,7 itsCenter  = (2;7)
Le paradigme Objet 3/5 Le principe d’ENCAPSULATION Prône, d’une part le rassemblent des données et du code les utilisant dans une entité unique nommé objet, d’autre part, la séparation nette entre la partie publique d’un objet seule connue de l’utilisateur de la partie  privée  qui doit rester masquée. L’HERITAGE Il est basé sur l’idée qu’un objet spécialisé bénéficie ou hérite des caractéristiques de l’objet le plus général auquel  il rajoute ses éléments propres. On associe une classe au concept le plus général, c’est la  classe de base  ou  classe mère  ou  super-classe; On dérive une classe du concept de base. La nouvelle classe est dite  classe dérivée  ,  fille  ou  sous-classe. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Le paradigme Objet 4/5 Exemple de diagramme d’héritage mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  SHAPE +  Draw(); +  Erase(); SQUARE CIRCLE
Le paradigme Objet 5/5 Le POLYMORPHISME Troisième principe du paradigme objet, il permet à une méthode d’adopter plusieurs forme sur des classes différentes. Selon les langages, le polymorphisme pourra s’exprimer sur l’ensemble des classes d’un système alors que d’autres le confinent aux classe appartenant à une même hiérarchie. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
PHP & le paradigme Objet 1/10 PHP 4 implémente déjà le concept orienté-objet  mais le modèle qu’il propose ne contient ni interfaces, ni exceptions, ni méthodes spécialisé. De plus l’utilisation d’objet accusait une certaine lenteur d’exécution. PHP 5 fournir un ensemble d’objets conformes au paradigme orienté-objet (exception, méthode spécialisé…) mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
PHP & le paradigme Objet 2/10 Structure d’une class en PHP5 class MessageHandler { var   $message  = “No message”; function  __construct ($message) { $this- > message  = $message; } function displayMessage() { echo $this->message.”\n”; } } mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
PHP & le paradigme Objet 3/10 Utilisation d’un objet <?php Require_once(‘MessageHandler.php’); $myMessage =  new  MessageHandler(‘HI, THE FOLK MIAGE !’); $myMessage->displayMessage(); ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
PHP & le paradigme Objet 4/10 On peut créer une classe dans un contexte plus général en utilisant le concept de  classe abstraite . C’est une classe qui ne peut être instanciée qu’après son extension. Exemple <?php abstract   class MessageHandler  { abstract  public function setMessage(); } ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  CLASSE ABSTRAITE
PHP & le paradigme Objet 5/10 L’héritage en PHP 5 require_once(‘MessageHandler.php’); class New_MessageHandler  exdends  MessageHandler { function __construct($message) { parent :: __construct($message); } function  lowerCaseMessage () { $this->message = strtolower($this->message); $this->displayMessage(); } } mardi 2 juin 2009 | Page  Zend Framework  Présenté par Ndjido Ardo BAR
PHP & le paradigme Objet 6/10 L’héritage multiple n’existant par en PHP, les interfaces constituent un mécanisme de remplacement. Les interfaces sont comparables à des classes sans attributs (mise à part les constantes ) dont toutes les méthodes sont abstraites. Une classe peut implémenter plusieurs interfaces. Les méthodes décrites dans les interfaces sont polymorphes car étant indépendantes  mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  LES INTERFACES
PHP & le paradigme Objet 7/10 mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  Exemple d’implémentation d’interface
PHP & le paradigme Objet 8/10 Code d’implémentation interface  Pet { public function getName(); public function getBreed(); } Class Bird  implements  Pet { Var $name = null; Var $breed = null; Function getName(){ return $this->name;} Function getBreed(){ return $this->breed;} } Toutes les méthodes doivent être implémentées. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
PHP & le paradigme Objet 9/10 Les exceptions représentent l’un des nouveaux mécanismes de gestion d’erreurs les plus évolués.  Son but est d’isoler des portions de code utilisant  des objets  susceptibles de générer des erreurs. De ce fait le développeur évite l’arrêt brusque de l’exécution d’une application (bug) . mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  LES EXCEPTIONS
PHP & le paradigme Objet 10/10 class Car { private $gas = 0; private function  addGas ($amount) { $this->gas = $this->gas + $amount; echo “$amount gallons added to gas tank”; } function buyGas($amount) { $this->addGas($amount); } } private function  addGas ($amount){ Try  { if ($amount< 0){ throw new Exception ( “Negative amount of gas.”); } else{ $this->gas = $this->gas + $amount; echo “$amount gallons added to gas tank”; } } catch  ( Exception $e ) { echo $e->getMessage(); echo “\n<br />\n”; exit(); }  } mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  Exemple d’utilisation d’une EXECPTION
Les méthodes MAGIQUES de PHP5 PHP5 fournit des méthodes spécifiques que l’on qualifient de magiques. Ces méthodes ont la particularité de débuter tous par un double underscore (__).Celles-ci sont invoquées de manière automatique. Les invocations sont relatives à des événements tels que: L’instanciation d’un objet  =>   __construction(…) ; La destruction d’un objet  =>   __destruct() ; Première référence à un objet  =>  __ autoload() ; Copie d’un objet avec le mot clé «clone»  =>  __ clone() ; Tentative de  récupération  ou de  modification  d’une attribut d’un objet non défini  =>  respectivement  __ get ()  et  __ set (); Invocation d’une méthode non définie  =>  __ call() ; Etc… mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
LES DESIGN PATTERNS mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Les DESIGN PATTERN 1/6 Un design pattern est une solution à un problème connu de la plupart des développeurs. Il ne dépend pas du langage utilisé. Seulement nous nous intéresserons aux design pattern Orienté-objet. Les avantages sont: La facilité de maintenance du code La lisibilité du code La facilité dans le développement de grandes applications L’accès à une documentation bien fournie Le développement de code utilisable par d’autres personnes mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Les DESIGN PATTERN 2/6 Les design pattern les plus utilisés sur PHP sont: Le FACTORY PATTERN Le SINGLETON PATTERN LA FRONT PATTERN L’ OBSERVEBALE PATTERN LA STRATEGIE PATTERN mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Les DESIGN PATTERN 3/6 FACTORY PATTERN: Problématique : disposer d’une interface pour créer une famille d’objets. Solution : création d’une fabrique de fabrique.  La factory pattern fournit des méthodes pour créer des objets. On utilise la class factory au lieux du mot clé  new  pour créer des objets. Exemple:  Zend_Db::factory(); permet de créer un objet connexion selon le type de base de donnée. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Les DESIGN PATTERN 4/6 mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  Exemple de fabrique d’objets
Les DESIGN PATTERN 5/6 SINGLETON PATTERN Problématique : Certaines ressources sont exclusives dans une application du fait qu’elles sont les seules à être disponibles. Par exemple la connexion à une base de donnée. Une alternation de connexion et déconnexion à une base pour une même application est une mauvaise pratique de développement. Solution : Le singleton pattern permet de restreindre le nombre d’instance d’un objet à un (01) durant toute la durée d’exécution d’une application. Généralement c’est la méthode  getInstance () qui est utilisée au lieux du mot clé  new  pour créer un objet. Exemple:  Zend_Controller_Front::getInstance(); permet dans ZF de créer un contrôler. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Les DESIGN PATTERN 6/6 FRONT PATTERN Problématique : Comment masquer la complexité d'une API qui réponds à un besoin simple. Solution : Un objet qui s'occupe de masquer la complexité des objets sous-jacents. Exemple: La gestion d’un objet requête dans l’architecture MVC de Zend Framework suit un processus relativement complexe, c’est pour cacher cette complexité que l’objet  Zend_Controller_Front  est mis en place. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
INTRODUCTION AU  ZEND FRAMEWORK mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Introduction au Zend Framework Qu’est ce donc qu’un FRAMEWORK? Ensemble de bibliothèques /classes / fonctions et de conventions permettant le développement rapide d'applications. Donne un cadre structuré et impose une rigueur entraînant la production de code fiable et facile à maintenir. Dans le cadre de la POO, l’utilisation d’un framework permet de réaliser un gain énorme et temps et en simplicité. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  NOT REINVENT THE WHEEL!!
Qu’est ce que Zend Framework? Une bibliothèque de classes PHP 5 pour le développement web; Gratuit, open source, BSD license (comme PHP); +150,000 lignes de code; Accent mis sur la qualité; Les solutions y sont  “très simples” –  avec des possibilités d’extension; +200,000 téléchargements. http://framework.zend.com/ mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Historique du Zend Framework Créé le 19 Octobre 2005 par l‘entreprise Zend en Californie. Première publication officielle datant du  03 Mars 2006  (V0.1.1) 12 version depuis 2006 Version actuelle 1.5.0 La version officielle est en ce moment la 1.3.0 mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Contenu du Zend Framework? MVC web app framework (model-view-controller) Database access Lucene-compatible Search engine Input filtering and validation Authentication Access control Session handling I18N, translation PDF file reading and writing HTTP client XmlRpc REST web services RSS and Atom feeds Google Gdata client Logging Mail reading and sending Caching Configuration file handling Command-line option parsing mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  Simple, convenient object-oriented solutions to common web application development tasks:
Aperçu de l’API mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Aperçu du contenu1/4 MVC Layer Zend_Controller – Controller Pattern Zend_View – View Pattern DATA Layer Zend_Db – Database Handling Zend_Pdf – PDF Creation and Handling Zend_Search – Lucene Search I18N Layer Zend_Date – Localized Date handling Zend_Locale – I18N Base class, Localisation Zend_Measure – Measurements, conversions Zend_Translate – Translations mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Aperçu du contenu2/4 WEB Services Layer Zend_Feed – RSS und ATOM Feeds Zend_GData – Google Data Client Zend_Http – HTTP Client and Server  Zend_Json – JSON Access Zend_Rest – Rest Client and Server Zend_XmlRpc – XMLRPC Client and Server Zend_Service – Access for different web services including Askimet Amazon Audioscrobbler Delicious Flickr Simpy Yahoo and more are already in the incubator or proposed mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Aperçu du contenu 3/4 Core Layer Zend_Acl – Access Controll List, Limiting ressources, roles, users Zend_Auth – Authentication Zend_Cache – Caching Zend_Config – Configuration Handling Zend_Console – Console Options Handling Zend_Filter – Filtering Input data Zend_Log – Log file Handling (log4j based) Zend_Mail – Mail sending and receiving Zend_Memory – Memory Access when memory is limited Zend_Registry – Storing data within an application registry Zend_Session – Session Handling Zend_Validate – Validating mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Aperçu du contenu4/4 Incubator Components… after 1.0 release, already partitial useable Zend_Currency – Localized currency handling (I18N) Zend_Environment – (Core) Zend_Form – Form handling (MVC) Zend_Soap – Soap Client and Server (Services) Zend_Timesync – Timeserver access (NTP, SNTP) (I18N) Future Components Several additional components proposed including… LDAP, Calendar, PayPal, YouTube, Yaml… Proposals http://framework.zend.com/wiki/display/ZFPROP/Home mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Configuration repertoire /Zend /Zend/Locale.php /Zend/Locale /Zend/Locale/Format.php … Un composant est toujours une classe de base et ses classes dérivées  sont dans un répertoire du même nom… De ce fait on peut utiliser quelques composant sans installer la totalité du framework. Cette configuration permet de charger les classes facilement avec l’objet Zend_Loader. Exemple: Supposons qu’on veut utiliser la classe “Zend_Version” Zend_Loader::loadClass(‘Zend_Version’);  mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Minimum requis pour ZF Le minimum requis pour faire marcher ZF PHP 5.1.4  Un serveur Web Une installation standard mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Installation de Zend Framework 1/2 Arborescence minimale mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Installation de Zend Framework 2/2 L’  INCLUDE_PATH  est un paramètre qui définit la place où les classes et les fonctions sont recherchées  lorsqu’elles sont invoquées . L’installation de ZF consiste à ajouter le répertoire « Zend » dans l’ include_path . Mise en œuvre :  ici « Zend » est dans « library » set_include_path ( '.'. PATH_SEPARATOR .'./ library /'.PATH_SEPARATOR.'./models'.PATH_SEPARATOR. get_include_path ()); mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
PRÉSENTATION DE QUELQUES CLASSES mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
ZEND_LOADER « Zend_Loader » est une classe qui permet de charger les autres composants du ZF d’une manière élégante. Elle adopte la convention de PEAR. Mise en œuvre: <?php require('Zend/Loader.php'); Zend_Loader :: loadClass ( ‘Zend_Version'); ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
ZEND_VERSION Il est souvent utile de connaître la version de ZF de notre hébergeur si on ne l’installe pas soi même. L’objet  «Zend_Version » est créé à cet effet Mise en œuvre: <?php require('Zend/Loader.php'); Zend_Loader::loadClass(‘Zend_Version'); if (Zend_Version:: compareVersion (‘1.0.beta') > 0) { echo &quot;Please upgrade to a newer version of ZF for this exemple.\n&quot;; } else { echo &quot;\n\n \t Ready to use Zend Framework!\n&quot;; } ?>   mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
ZEND_CONFIG & Zend_Config_{Ini,Xml} 1/2 Ce objet permet la séparation de la configuration de l’application et du code source. Les paramètres de configuration sont mis dans un fichier  «. ini » ou « .xml ». Mise en œuvre: <?php … Zend_Loader::loadClass( 'Zend_Config'); Zend_Loader::loadClass( 'Zend_Config_Ini'); $config =  new Zend_Config_Ini('./config/config.ini', ‘db_conf'); ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
ZEND_CONFIG & Zend_Config_{Ini,Xml} 2/2 Exemple de fichier de configuration  « .ini » pour la configuration d’une base de données #DATABASE CONFIG [db_conf] db . adapter  = Pdo_Mysql #’Pdo_oci’ ou ‘Pdo_Pgsql’… db.config . host  = localhost db.config . username  = root db.config . password  = db.config . dbname  = zf_lab mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
ZEND_DB Ce objet permet d’accéder à une base de donnée. Il implémente le concept de  Factory Pattern . Mise en œuvre: <?php … Zend_Loader::loadClass( 'Zend_DB'); $db = Zend_Db:: factory ($config->db->adapter,  $config->db->config->toArray()); $db-> getConnection (); $db-> setFetchMode (Zend_db:: FETCH_OBJ ); … ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
ZEND_Db_TABLE: Le ORM (Mapping Objet Relationnel) L’objet  « Zend_Db_Table » permet d’interpréter une table d’une base de donnée comme un objet. Les données peuvent de ce fait être récupérées sans utiliser de requête SQL. Cet objet est la base de l’entité M (Model) de l’architecture MVC. Pour faire du ORM, on dérive la classe  Zend_Db_Table_Abstract  et de définir des méthodes qui traiterons les données si necessaire. Mise en œuvre voir l’ model MVC mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
L’ARCHITECTURE MVC mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
L’architecture MVC 1/7 MVC =  M odel  V iew  C ontroller Le model MVC est un design pattern dont l’objectif est de séparer les différentes parties d’une application: La présentation    VIEW=VUE La logique métier   MODELE Le contrôleur    Controller Cette séparation a l’avantage de répartir les groupes de travail sur un projet. La modification d’une partie n’affectant pas forcément les autres. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
L’architecture MVC 2/7 Représentation graphique du model mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
L’architecture MVC 3/7 Le  Controller  à travers  ZEND_CONTROLER_FRONT  cette classe implémente un  FRONT PATTERN  de  ce fait elle cache toute la complexité du traitement d’une requête utilisateur.   L’objet implémente aussi le  SINGLETON PATTERN  c’est-à-dire qu’un seul objet de ce type peut être instancié. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  Zend_Controler_Front
L’architecture MVC 4/7 Zend_Controller_Front 1/2 Mise en œuvre: <?php … Zend_Loader::loadClass( 'Zend_Controller_Front'); $controller = Zend_Controller_Front:: getInstance (); $controller->run( './controllers'); ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  Répertoire contenant la classe du contrôleur
L’architecture MVC 5/7 Zend_Controller_Front  2/2 <?php @ require_once 'Zend/Loader.php'; Zend_Loader::loadClass( 'Zend_Controller_Action'); Zend_Loader::loadClass( 'Zend_Registry'); class IndexController extends Zend_Controller_Action{ public function  index Action (){  } public function  add Action (){  } public function  edit Action (){ } public function  delete Action (){ } } ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
L’architecture MVC 6/ 7 Le Model 1/2 Le M = model de MVC représente la partie qui contient le code métier et les accès aux données de l’application. L’accès aux données peux se faire via une dérivée de la classe  Zend_Db_Table  comme nous l’avons déjà précisé. Mise en œuvre: <?php @ require_once 'Zend/Loader.php'; Zend_Loader::loadClass( 'Zend_Db_Table_Abstract'); Zend_Loader::loadClass( 'Zend_Registry'); class  Contact  extends  Zend_Db_Table_Abstract { protected $_name = &quot;Contact&quot;; protected $_primary = &quot;Id&quot;; } ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
L’architecture MVC 6/ 7 Le Model 2/2 Utilisation de la table Contact à travers un objet Mise en œuvre Dans la méthode  indexAction() <?php … Zend_Loader::loadClass( 'Contact'); $contact =  new  Contact (); $result = $contact->fetchAll()->toArray(); … ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
L’architecture MVC 7/ 7 La Vue 1/1 V= la Vue représente la partie présentation de l’application, son rôle d’afficher le résultat des requêtes de présenter des formulaires de soumission. Elle est prise en charge par un graphiste. L’objet  Zend_View  se charge de l’interprétation des vues. Il est aidé en cela par des objet nommés Helpers dont le but est de créer des éléments graphiques un peu plus complexes. Toutefois nous trouvons que cet objet n’assure pas une bonne séparation entre les entités du model MVC, si bien que nous sommes amenés à introduire la notion de  « moteur de template » mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
MOTEUR DE TEMPLATE: SMARTY mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Moteur de template 1/6 Qu’est ce qu’un moteur de template? Un moteur de template est une classe qui permet la séparation de la couche présentation et de la couche métier d’une application . Exemple: SMARTY VTemplate ModeliXE mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Moteur de template 2/6 SMARTY est un MT open source. Principe: L'idée est de déporter la logique d'affichage depuis le script PHP vers le gabarit. Les gabarits sont des fichiers avec l’extension  «.tpl». Ces fichiers ont leur propre langage de présentation dit  langage de Template qui est souvent mélangé au code HTML. Ce langage qui est très simple doit être connu du graphiste d’un projet d’application web. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page  SMARTY
Moteur de template 3/6 Exemple de code de gabarit … <div id=&quot;content&quot;> <table border=1> {foreach item=contact from=$contacts } <tr> {foreach key=key item=item from=$contact } <td> {$item} </td> {/foreach} </tr> {/foreach} </table> </div> </body> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Moteur de template 4/6 Zend_View et SMARTY Comme l’objet  Zend_View  n’assure pas une séparation optimale entre la présentation est la logique de l’application, on se propose d’étendre la classe en y insérant un moteur SMARTY. Après cette dérivation l’objet  Zend_View  pourra être utilisé comme auparavant.  Nous avons déjà fait l’extension (pour la mise en œuvre). Intéressons nous donc  à la configuration du moteur et à son utilisation. mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Moteur de template 5/6 Insersion de SMARTY dans l’objet Zend_View  <?php include_once &quot;Smarty/Smarty.class.php&quot;; Zend_Loader::loadClass( 'Zend_View_Smarty'); … $smarty = new  Smarty (); $smarty->template_dir = 'views/scripts/ templates '; $smarty->compile_dir = 'views/scripts/ templates_c '; $smarty->config_dir = 'views/scripts/ configs /'; $smarty->cache_dir = 'views/scripts/ cache /'; $smarty_view = new  Zend_View_Smarty ; $smarty_view-> setEngine ($smarty); … ?> mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Moteur de template 6/6 Utilisation du moteur public function indexAction(){ Zend_Loader::loadClass('Contact'); $smarty = Zend_Registry::get('smarty'); $contact = new Contact(); $result = $contact->fetchAll()->toArray(); $smarty->title ='My contacts!'; $smarty-> assign ('contacts',$result); echo $smarty-> render (&quot; index.tpl &quot;); } mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
Conclusion Des solutions simples Facile à manipuler Facile à étendre Grande qualité de code Evolution très rapide mardi 2 juin 2009 Zend Framework  Présenté par Ndjido Ardo BAR | Page
MERCI KEEP ON USING FRAMEWORKS

PHP5 et Zend Framework

  • 1.
    PHP5: Développement avec Zend Framework The PHP framework leader for Web application developement Présenté par Ndjido Ardo BAR [email_address]
  • 2.
    Sommaire Généralités surPHP Les nouveautés sur PHP5 PHP5 et le paradigme objet Les Design Patterns Introduction au Zend Framework Présentation de quelques classes L’architecture MVC Moteur de Template Conclusion mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 3.
    GÉNÉRALITÉS SUR PHPmardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 4.
    Généralités sur PHP—HISTORIQUE1/2 PHP signifie PHP Hypertext Preprocessor La première version de php est créée en perl par Rasmus Lerdorf en 1994. Cette version était destinée à une utilisation personnelle. Par suite elle est étendue à php/FI avec l’addition du package Form Interpreter. En 1997 deux étudiants du nom de Zeev Surastki et Andy Gutmans créent un nouveau parseur en c pour php. Ce qui donne naissance à PHP3. En 2003 sort la version 4 de php avec un nouveau moteur (Zend Engine) qui marche sur plusieurs serveurs web autre que Apache. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 5.
    Généralités sur PHP—HISTORIQUE2/2 Actuellement, php est maintenue par l’entreprise Zend avec une équipe dynamique de développeurs. Zend développe aussi la plateforme Zend Framework et l’environnement de développement Zend IDE. En plus de respecter davantage le paradigme Object (classe, message, exception…), PHP5 apporte des nouveautés telle que la base de données embarquée SqLite, php6 s’annonce avec beaucoup de fonctions orientées WEB 2.0 mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 6.
    Généralités sur PHP—Caractéristique1/1 PHP est langage qui s’exécute coté serveur Il est interprété par le Zend Engine, par opposition aux langage compilé comme le c PHP est indépendant de la plateforme PHP est open source, (code source accessible sur le net) PHP est un langage extensible mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 7.
    Généralités sur PHP–Fonctionnement 1/1 mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page L’architecture CLIENT/SERVEUR
  • 8.
    Généralités sur PHP—Avantagesde php PHP est très facile à apprendre PHP dispose d’une documentation énorme à travers les forums, les sites spécialisés, les mailling liste… PHP étant open source dispose d’un système efficace de détection de bugs PHP supporte une large variété de SGBD (MySql, Oracle, Posgresql…) On peut aussi bien développer en procédural qu’avec le paradigme objet On trouve de nombreuses application développées en php: jOOMLA, phpBB… mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 9.
    Généralités sur PHP—Faiblesses1/1 PHP est faiblement typé Exemple: le code suivant ne génère pas d’erreur <?php $var = array(); $var = ’11ESD’; ?> Problème de sécurité: exemple injection sql Existence de code amateur sur le net Mauvaise pratique du développement avec php4 (spaghetti code dû au mélange de codes php et html) mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 10.
    PHP 5 :LES NOUVEAUTÉS mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 11.
    Nouveautés sur PHP51/2 Le paradigme objet Le nouveau model objet implémente des méthodes spécifiques Exemple: __construct(); __get(); __set()… Gestion des exceptions Existence d’Interfaces => Polymorphisme Héritage SQLITE Sqlite est une simulation de base de donnée à travers des fichiers plats. Son avantage est de pouvoir utiliser du SQL sur des fichiers. Il hérite toutefois des faiblesses des fichiers c’est-à-dire le manque de sécurité et le nombre limité de données pouvant être stocker mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 12.
    Nouveautés sur PHP52/2 SimpleXML permet d’interpréter des fichiers xml d’une manière très simple. Une nouvelle version de l’interface DOM qui permet de manipuler les fichiers xml. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 13.
    PHP 5 &LE PARADIGME OBJET mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 14.
    Le paradigme Objet1/5 Un objet est une entité cohérente rassemblant des données et du code travaillant sur ses données. Une classe peut être considérée somme un moule à partir duquel on peut créer des objets. La notion de classe peut être considérée comme une expression de la notion de classe d’équivalence chère aux mathématiciens. Les classes sont la méta donnée des objets. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 15.
    Le paradigme Objet2/5 Une classe décrit la structure interne d’un objet. Elle encapsule les données et les actions qu’il est capable d’effectuer sur celles-ci. L’instanciation est l’opération qui permet de créer une objet à partir d’une classe. Exemple: mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page # itsRadius : double # itsCenter : Point CIRCLE + Area() : double + Circumference(): double + SetCenter(Point) + SetRadius() Classe Instances itsRadius = 2,7 itsCenter = (2;1) itsRadius = 2,7 itsCenter = (2;7)
  • 16.
    Le paradigme Objet3/5 Le principe d’ENCAPSULATION Prône, d’une part le rassemblent des données et du code les utilisant dans une entité unique nommé objet, d’autre part, la séparation nette entre la partie publique d’un objet seule connue de l’utilisateur de la partie privée qui doit rester masquée. L’HERITAGE Il est basé sur l’idée qu’un objet spécialisé bénéficie ou hérite des caractéristiques de l’objet le plus général auquel il rajoute ses éléments propres. On associe une classe au concept le plus général, c’est la classe de base ou classe mère ou super-classe; On dérive une classe du concept de base. La nouvelle classe est dite classe dérivée , fille ou sous-classe. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 17.
    Le paradigme Objet4/5 Exemple de diagramme d’héritage mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page SHAPE + Draw(); + Erase(); SQUARE CIRCLE
  • 18.
    Le paradigme Objet5/5 Le POLYMORPHISME Troisième principe du paradigme objet, il permet à une méthode d’adopter plusieurs forme sur des classes différentes. Selon les langages, le polymorphisme pourra s’exprimer sur l’ensemble des classes d’un système alors que d’autres le confinent aux classe appartenant à une même hiérarchie. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 19.
    PHP & leparadigme Objet 1/10 PHP 4 implémente déjà le concept orienté-objet mais le modèle qu’il propose ne contient ni interfaces, ni exceptions, ni méthodes spécialisé. De plus l’utilisation d’objet accusait une certaine lenteur d’exécution. PHP 5 fournir un ensemble d’objets conformes au paradigme orienté-objet (exception, méthode spécialisé…) mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 20.
    PHP & leparadigme Objet 2/10 Structure d’une class en PHP5 class MessageHandler { var $message = “No message”; function __construct ($message) { $this- > message = $message; } function displayMessage() { echo $this->message.”\n”; } } mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 21.
    PHP & leparadigme Objet 3/10 Utilisation d’un objet <?php Require_once(‘MessageHandler.php’); $myMessage = new MessageHandler(‘HI, THE FOLK MIAGE !’); $myMessage->displayMessage(); ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 22.
    PHP & leparadigme Objet 4/10 On peut créer une classe dans un contexte plus général en utilisant le concept de classe abstraite . C’est une classe qui ne peut être instanciée qu’après son extension. Exemple <?php abstract class MessageHandler { abstract public function setMessage(); } ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page CLASSE ABSTRAITE
  • 23.
    PHP & leparadigme Objet 5/10 L’héritage en PHP 5 require_once(‘MessageHandler.php’); class New_MessageHandler exdends MessageHandler { function __construct($message) { parent :: __construct($message); } function lowerCaseMessage () { $this->message = strtolower($this->message); $this->displayMessage(); } } mardi 2 juin 2009 | Page Zend Framework Présenté par Ndjido Ardo BAR
  • 24.
    PHP & leparadigme Objet 6/10 L’héritage multiple n’existant par en PHP, les interfaces constituent un mécanisme de remplacement. Les interfaces sont comparables à des classes sans attributs (mise à part les constantes ) dont toutes les méthodes sont abstraites. Une classe peut implémenter plusieurs interfaces. Les méthodes décrites dans les interfaces sont polymorphes car étant indépendantes mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page LES INTERFACES
  • 25.
    PHP & leparadigme Objet 7/10 mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page Exemple d’implémentation d’interface
  • 26.
    PHP & leparadigme Objet 8/10 Code d’implémentation interface Pet { public function getName(); public function getBreed(); } Class Bird implements Pet { Var $name = null; Var $breed = null; Function getName(){ return $this->name;} Function getBreed(){ return $this->breed;} } Toutes les méthodes doivent être implémentées. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 27.
    PHP & leparadigme Objet 9/10 Les exceptions représentent l’un des nouveaux mécanismes de gestion d’erreurs les plus évolués. Son but est d’isoler des portions de code utilisant des objets susceptibles de générer des erreurs. De ce fait le développeur évite l’arrêt brusque de l’exécution d’une application (bug) . mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page LES EXCEPTIONS
  • 28.
    PHP & leparadigme Objet 10/10 class Car { private $gas = 0; private function addGas ($amount) { $this->gas = $this->gas + $amount; echo “$amount gallons added to gas tank”; } function buyGas($amount) { $this->addGas($amount); } } private function addGas ($amount){ Try { if ($amount< 0){ throw new Exception ( “Negative amount of gas.”); } else{ $this->gas = $this->gas + $amount; echo “$amount gallons added to gas tank”; } } catch ( Exception $e ) { echo $e->getMessage(); echo “\n<br />\n”; exit(); } } mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page Exemple d’utilisation d’une EXECPTION
  • 29.
    Les méthodes MAGIQUESde PHP5 PHP5 fournit des méthodes spécifiques que l’on qualifient de magiques. Ces méthodes ont la particularité de débuter tous par un double underscore (__).Celles-ci sont invoquées de manière automatique. Les invocations sont relatives à des événements tels que: L’instanciation d’un objet => __construction(…) ; La destruction d’un objet => __destruct() ; Première référence à un objet => __ autoload() ; Copie d’un objet avec le mot clé «clone» => __ clone() ; Tentative de récupération ou de modification d’une attribut d’un objet non défini => respectivement __ get () et __ set (); Invocation d’une méthode non définie => __ call() ; Etc… mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 30.
    LES DESIGN PATTERNSmardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 31.
    Les DESIGN PATTERN1/6 Un design pattern est une solution à un problème connu de la plupart des développeurs. Il ne dépend pas du langage utilisé. Seulement nous nous intéresserons aux design pattern Orienté-objet. Les avantages sont: La facilité de maintenance du code La lisibilité du code La facilité dans le développement de grandes applications L’accès à une documentation bien fournie Le développement de code utilisable par d’autres personnes mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 32.
    Les DESIGN PATTERN2/6 Les design pattern les plus utilisés sur PHP sont: Le FACTORY PATTERN Le SINGLETON PATTERN LA FRONT PATTERN L’ OBSERVEBALE PATTERN LA STRATEGIE PATTERN mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 33.
    Les DESIGN PATTERN3/6 FACTORY PATTERN: Problématique : disposer d’une interface pour créer une famille d’objets. Solution : création d’une fabrique de fabrique. La factory pattern fournit des méthodes pour créer des objets. On utilise la class factory au lieux du mot clé new pour créer des objets. Exemple: Zend_Db::factory(); permet de créer un objet connexion selon le type de base de donnée. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 34.
    Les DESIGN PATTERN4/6 mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page Exemple de fabrique d’objets
  • 35.
    Les DESIGN PATTERN5/6 SINGLETON PATTERN Problématique : Certaines ressources sont exclusives dans une application du fait qu’elles sont les seules à être disponibles. Par exemple la connexion à une base de donnée. Une alternation de connexion et déconnexion à une base pour une même application est une mauvaise pratique de développement. Solution : Le singleton pattern permet de restreindre le nombre d’instance d’un objet à un (01) durant toute la durée d’exécution d’une application. Généralement c’est la méthode getInstance () qui est utilisée au lieux du mot clé new pour créer un objet. Exemple: Zend_Controller_Front::getInstance(); permet dans ZF de créer un contrôler. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 36.
    Les DESIGN PATTERN6/6 FRONT PATTERN Problématique : Comment masquer la complexité d'une API qui réponds à un besoin simple. Solution : Un objet qui s'occupe de masquer la complexité des objets sous-jacents. Exemple: La gestion d’un objet requête dans l’architecture MVC de Zend Framework suit un processus relativement complexe, c’est pour cacher cette complexité que l’objet Zend_Controller_Front est mis en place. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 37.
    INTRODUCTION AU ZEND FRAMEWORK mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 38.
    Introduction au ZendFramework Qu’est ce donc qu’un FRAMEWORK? Ensemble de bibliothèques /classes / fonctions et de conventions permettant le développement rapide d'applications. Donne un cadre structuré et impose une rigueur entraînant la production de code fiable et facile à maintenir. Dans le cadre de la POO, l’utilisation d’un framework permet de réaliser un gain énorme et temps et en simplicité. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page NOT REINVENT THE WHEEL!!
  • 39.
    Qu’est ce queZend Framework? Une bibliothèque de classes PHP 5 pour le développement web; Gratuit, open source, BSD license (comme PHP); +150,000 lignes de code; Accent mis sur la qualité; Les solutions y sont “très simples” – avec des possibilités d’extension; +200,000 téléchargements. http://framework.zend.com/ mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 40.
    Historique du ZendFramework Créé le 19 Octobre 2005 par l‘entreprise Zend en Californie. Première publication officielle datant du 03 Mars 2006 (V0.1.1) 12 version depuis 2006 Version actuelle 1.5.0 La version officielle est en ce moment la 1.3.0 mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 41.
    Contenu du ZendFramework? MVC web app framework (model-view-controller) Database access Lucene-compatible Search engine Input filtering and validation Authentication Access control Session handling I18N, translation PDF file reading and writing HTTP client XmlRpc REST web services RSS and Atom feeds Google Gdata client Logging Mail reading and sending Caching Configuration file handling Command-line option parsing mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page Simple, convenient object-oriented solutions to common web application development tasks:
  • 42.
    Aperçu de l’APImardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 43.
    Aperçu du contenu1/4MVC Layer Zend_Controller – Controller Pattern Zend_View – View Pattern DATA Layer Zend_Db – Database Handling Zend_Pdf – PDF Creation and Handling Zend_Search – Lucene Search I18N Layer Zend_Date – Localized Date handling Zend_Locale – I18N Base class, Localisation Zend_Measure – Measurements, conversions Zend_Translate – Translations mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 44.
    Aperçu du contenu2/4WEB Services Layer Zend_Feed – RSS und ATOM Feeds Zend_GData – Google Data Client Zend_Http – HTTP Client and Server Zend_Json – JSON Access Zend_Rest – Rest Client and Server Zend_XmlRpc – XMLRPC Client and Server Zend_Service – Access for different web services including Askimet Amazon Audioscrobbler Delicious Flickr Simpy Yahoo and more are already in the incubator or proposed mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 45.
    Aperçu du contenu3/4 Core Layer Zend_Acl – Access Controll List, Limiting ressources, roles, users Zend_Auth – Authentication Zend_Cache – Caching Zend_Config – Configuration Handling Zend_Console – Console Options Handling Zend_Filter – Filtering Input data Zend_Log – Log file Handling (log4j based) Zend_Mail – Mail sending and receiving Zend_Memory – Memory Access when memory is limited Zend_Registry – Storing data within an application registry Zend_Session – Session Handling Zend_Validate – Validating mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 46.
    Aperçu du contenu4/4Incubator Components… after 1.0 release, already partitial useable Zend_Currency – Localized currency handling (I18N) Zend_Environment – (Core) Zend_Form – Form handling (MVC) Zend_Soap – Soap Client and Server (Services) Zend_Timesync – Timeserver access (NTP, SNTP) (I18N) Future Components Several additional components proposed including… LDAP, Calendar, PayPal, YouTube, Yaml… Proposals http://framework.zend.com/wiki/display/ZFPROP/Home mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 47.
    Configuration repertoire /Zend/Zend/Locale.php /Zend/Locale /Zend/Locale/Format.php … Un composant est toujours une classe de base et ses classes dérivées sont dans un répertoire du même nom… De ce fait on peut utiliser quelques composant sans installer la totalité du framework. Cette configuration permet de charger les classes facilement avec l’objet Zend_Loader. Exemple: Supposons qu’on veut utiliser la classe “Zend_Version” Zend_Loader::loadClass(‘Zend_Version’); mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 48.
    Minimum requis pourZF Le minimum requis pour faire marcher ZF PHP 5.1.4 Un serveur Web Une installation standard mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 49.
    Installation de ZendFramework 1/2 Arborescence minimale mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 50.
    Installation de ZendFramework 2/2 L’ INCLUDE_PATH est un paramètre qui définit la place où les classes et les fonctions sont recherchées lorsqu’elles sont invoquées . L’installation de ZF consiste à ajouter le répertoire « Zend » dans l’ include_path . Mise en œuvre : ici « Zend » est dans « library » set_include_path ( '.'. PATH_SEPARATOR .'./ library /'.PATH_SEPARATOR.'./models'.PATH_SEPARATOR. get_include_path ()); mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 51.
    PRÉSENTATION DE QUELQUESCLASSES mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 52.
    ZEND_LOADER « Zend_Loader » estune classe qui permet de charger les autres composants du ZF d’une manière élégante. Elle adopte la convention de PEAR. Mise en œuvre: <?php require('Zend/Loader.php'); Zend_Loader :: loadClass ( ‘Zend_Version'); ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 53.
    ZEND_VERSION Il estsouvent utile de connaître la version de ZF de notre hébergeur si on ne l’installe pas soi même. L’objet «Zend_Version » est créé à cet effet Mise en œuvre: <?php require('Zend/Loader.php'); Zend_Loader::loadClass(‘Zend_Version'); if (Zend_Version:: compareVersion (‘1.0.beta') > 0) { echo &quot;Please upgrade to a newer version of ZF for this exemple.\n&quot;; } else { echo &quot;\n\n \t Ready to use Zend Framework!\n&quot;; } ?>   mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 54.
    ZEND_CONFIG & Zend_Config_{Ini,Xml}1/2 Ce objet permet la séparation de la configuration de l’application et du code source. Les paramètres de configuration sont mis dans un fichier «. ini » ou « .xml ». Mise en œuvre: <?php … Zend_Loader::loadClass( 'Zend_Config'); Zend_Loader::loadClass( 'Zend_Config_Ini'); $config = new Zend_Config_Ini('./config/config.ini', ‘db_conf'); ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 55.
    ZEND_CONFIG & Zend_Config_{Ini,Xml}2/2 Exemple de fichier de configuration « .ini » pour la configuration d’une base de données #DATABASE CONFIG [db_conf] db . adapter = Pdo_Mysql #’Pdo_oci’ ou ‘Pdo_Pgsql’… db.config . host = localhost db.config . username = root db.config . password = db.config . dbname = zf_lab mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 56.
    ZEND_DB Ce objetpermet d’accéder à une base de donnée. Il implémente le concept de Factory Pattern . Mise en œuvre: <?php … Zend_Loader::loadClass( 'Zend_DB'); $db = Zend_Db:: factory ($config->db->adapter, $config->db->config->toArray()); $db-> getConnection (); $db-> setFetchMode (Zend_db:: FETCH_OBJ ); … ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 57.
    ZEND_Db_TABLE: Le ORM(Mapping Objet Relationnel) L’objet « Zend_Db_Table » permet d’interpréter une table d’une base de donnée comme un objet. Les données peuvent de ce fait être récupérées sans utiliser de requête SQL. Cet objet est la base de l’entité M (Model) de l’architecture MVC. Pour faire du ORM, on dérive la classe Zend_Db_Table_Abstract et de définir des méthodes qui traiterons les données si necessaire. Mise en œuvre voir l’ model MVC mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 58.
    L’ARCHITECTURE MVC mardi2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 59.
    L’architecture MVC 1/7MVC = M odel V iew C ontroller Le model MVC est un design pattern dont l’objectif est de séparer les différentes parties d’une application: La présentation  VIEW=VUE La logique métier  MODELE Le contrôleur  Controller Cette séparation a l’avantage de répartir les groupes de travail sur un projet. La modification d’une partie n’affectant pas forcément les autres. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 60.
    L’architecture MVC 2/7Représentation graphique du model mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 61.
    L’architecture MVC 3/7Le Controller à travers ZEND_CONTROLER_FRONT cette classe implémente un FRONT PATTERN de ce fait elle cache toute la complexité du traitement d’une requête utilisateur. L’objet implémente aussi le SINGLETON PATTERN c’est-à-dire qu’un seul objet de ce type peut être instancié. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page Zend_Controler_Front
  • 62.
    L’architecture MVC 4/7Zend_Controller_Front 1/2 Mise en œuvre: <?php … Zend_Loader::loadClass( 'Zend_Controller_Front'); $controller = Zend_Controller_Front:: getInstance (); $controller->run( './controllers'); ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page Répertoire contenant la classe du contrôleur
  • 63.
    L’architecture MVC 5/7Zend_Controller_Front 2/2 <?php @ require_once 'Zend/Loader.php'; Zend_Loader::loadClass( 'Zend_Controller_Action'); Zend_Loader::loadClass( 'Zend_Registry'); class IndexController extends Zend_Controller_Action{ public function index Action (){ } public function add Action (){ } public function edit Action (){ } public function delete Action (){ } } ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 64.
    L’architecture MVC 6/7 Le Model 1/2 Le M = model de MVC représente la partie qui contient le code métier et les accès aux données de l’application. L’accès aux données peux se faire via une dérivée de la classe Zend_Db_Table comme nous l’avons déjà précisé. Mise en œuvre: <?php @ require_once 'Zend/Loader.php'; Zend_Loader::loadClass( 'Zend_Db_Table_Abstract'); Zend_Loader::loadClass( 'Zend_Registry'); class Contact extends Zend_Db_Table_Abstract { protected $_name = &quot;Contact&quot;; protected $_primary = &quot;Id&quot;; } ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 65.
    L’architecture MVC 6/7 Le Model 2/2 Utilisation de la table Contact à travers un objet Mise en œuvre Dans la méthode indexAction() <?php … Zend_Loader::loadClass( 'Contact'); $contact = new Contact (); $result = $contact->fetchAll()->toArray(); … ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 66.
    L’architecture MVC 7/7 La Vue 1/1 V= la Vue représente la partie présentation de l’application, son rôle d’afficher le résultat des requêtes de présenter des formulaires de soumission. Elle est prise en charge par un graphiste. L’objet Zend_View se charge de l’interprétation des vues. Il est aidé en cela par des objet nommés Helpers dont le but est de créer des éléments graphiques un peu plus complexes. Toutefois nous trouvons que cet objet n’assure pas une bonne séparation entre les entités du model MVC, si bien que nous sommes amenés à introduire la notion de « moteur de template » mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 67.
    MOTEUR DE TEMPLATE:SMARTY mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 68.
    Moteur de template1/6 Qu’est ce qu’un moteur de template? Un moteur de template est une classe qui permet la séparation de la couche présentation et de la couche métier d’une application . Exemple: SMARTY VTemplate ModeliXE mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 69.
    Moteur de template2/6 SMARTY est un MT open source. Principe: L'idée est de déporter la logique d'affichage depuis le script PHP vers le gabarit. Les gabarits sont des fichiers avec l’extension «.tpl». Ces fichiers ont leur propre langage de présentation dit langage de Template qui est souvent mélangé au code HTML. Ce langage qui est très simple doit être connu du graphiste d’un projet d’application web. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page SMARTY
  • 70.
    Moteur de template3/6 Exemple de code de gabarit … <div id=&quot;content&quot;> <table border=1> {foreach item=contact from=$contacts } <tr> {foreach key=key item=item from=$contact } <td> {$item} </td> {/foreach} </tr> {/foreach} </table> </div> </body> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 71.
    Moteur de template4/6 Zend_View et SMARTY Comme l’objet Zend_View n’assure pas une séparation optimale entre la présentation est la logique de l’application, on se propose d’étendre la classe en y insérant un moteur SMARTY. Après cette dérivation l’objet Zend_View pourra être utilisé comme auparavant. Nous avons déjà fait l’extension (pour la mise en œuvre). Intéressons nous donc à la configuration du moteur et à son utilisation. mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 72.
    Moteur de template5/6 Insersion de SMARTY dans l’objet Zend_View <?php include_once &quot;Smarty/Smarty.class.php&quot;; Zend_Loader::loadClass( 'Zend_View_Smarty'); … $smarty = new Smarty (); $smarty->template_dir = 'views/scripts/ templates '; $smarty->compile_dir = 'views/scripts/ templates_c '; $smarty->config_dir = 'views/scripts/ configs /'; $smarty->cache_dir = 'views/scripts/ cache /'; $smarty_view = new Zend_View_Smarty ; $smarty_view-> setEngine ($smarty); … ?> mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 73.
    Moteur de template6/6 Utilisation du moteur public function indexAction(){ Zend_Loader::loadClass('Contact'); $smarty = Zend_Registry::get('smarty'); $contact = new Contact(); $result = $contact->fetchAll()->toArray(); $smarty->title ='My contacts!'; $smarty-> assign ('contacts',$result); echo $smarty-> render (&quot; index.tpl &quot;); } mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 74.
    Conclusion Des solutionssimples Facile à manipuler Facile à étendre Grande qualité de code Evolution très rapide mardi 2 juin 2009 Zend Framework Présenté par Ndjido Ardo BAR | Page
  • 75.
    MERCI KEEP ONUSING FRAMEWORKS