75
Copyright © 2007, Zend Technologies Inc. PHP5: Développement avec Zend Framework The PHP framework leader for Web application developement Présenté par Ndjido Ardo BAR [email protected]

PHP5 et Zend Framework

Embed Size (px)

Citation preview

Page 1: PHP5 et Zend Framework

Copyright © 2007, Zend Technologies Inc.

PHP5:Développement avec Zend Framework

The PHP framework leader for Web application developement

Présenté par Ndjido Ardo [email protected]

Page 2: PHP5 et Zend Framework

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

mercredi 12 avril 2023Zend Framework Présenté par Ndjido Ardo BAR | Page 2

Page 3: PHP5 et Zend Framework

GÉNÉRALITÉS SUR PHP

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 3

Page 4: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 4

Page 5: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 5

Page 6: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 6

Page 7: PHP5 et Zend Framework

Généralités sur PHP– Fonctionnement 1/1

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 7

L’architecture CLIENT/SERVEUR

Page 8: PHP5 et Zend Framework

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…

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 8

Page 9: PHP5 et Zend Framework

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)

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 9

Page 10: PHP5 et Zend Framework

PHP 5 : LES NOUVEAUTÉS

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 10

Page 11: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 11

Page 12: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 12

Page 13: PHP5 et Zend Framework

PHP 5 & LE PARADIGME OBJET

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 13

Page 14: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 14

Page 15: PHP5 et Zend Framework

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:

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 15

# itsRadius : double# itsCenter : Point

CIRCLE

+ Area() : double+ Circumference(): double+ SetCenter(Point)+ SetRadius()

ClasseInstance

s

itsRadius = 2,7itsCenter =

(2;1)

itsRadius = 2,7itsCenter =

(2;7)

Page 16: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 16

Page 17: PHP5 et Zend Framework

Le paradigme Objet 4/5

• Exemple de diagramme d’héritage

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 17

SHAPE

+ Draw();+ Erase();

SQUARECIRCLE

Page 18: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 18

Page 19: PHP5 et Zend Framework

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é…)

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 19

Page 20: PHP5 et Zend Framework

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”;• }• }

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 20

Page 21: PHP5 et Zend Framework

PHP & le paradigme Objet 3/10

• Utilisation d’un objet• <?php

• Require_once(‘MessageHandler.php’);

• $myMessage = new MessageHandler(‘HI, THE FOLK MIAGE !’);

• $myMessage->displayMessage();

• ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 21

Page 22: PHP5 et Zend Framework

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();• }• ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 22

CLASSE ABSTRAITE

Page 23: PHP5 et Zend Framework

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();• }• }

mercredi 12 avril 2023

| Page 23Zend Framework Présenté par Ndjido Ardo BAR

Page 24: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 24

LES INTERFACES

Page 25: PHP5 et Zend Framework

PHP & le paradigme Objet 7/10

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 25

Exemple d’implémentation d’interface

Page 26: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 26

Page 27: PHP5 et Zend Framework

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) .

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 27

LES EXCEPTIONS

Page 28: PHP5 et Zend Framework

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();

• } }

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 28

Exemple d’utilisation d’une EXECPTION

Page 29: PHP5 et Zend Framework

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…

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 29

Page 30: PHP5 et Zend Framework

LES DESIGN PATTERNS

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 30

Page 31: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 31

Page 32: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 32

Page 33: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 33

Page 34: PHP5 et Zend Framework

Les DESIGN PATTERN 4/6

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 34

Exemple de fabrique d’objets

Page 35: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 35

Page 36: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 36

Page 37: PHP5 et Zend Framework

INTRODUCTION AU ZEND FRAMEWORK

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 37

Page 38: PHP5 et Zend Framework

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é.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 38

NOT REINVENT THE WHEEL!!

Page 39: PHP5 et Zend Framework

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/

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 39

Page 40: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 40

Page 41: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 41

• Simple, convenient object-oriented solutions to common web application development tasks:

Page 42: PHP5 et Zend Framework

Aperçu de l’API

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 42

Page 43: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 43

Page 44: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 44

Page 45: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 45

Page 46: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 46

Page 47: PHP5 et Zend Framework

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’);

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 47

Page 48: PHP5 et Zend Framework

Minimum requis pour ZF

• Le minimum requis pour faire marcher ZF

PHP 5.1.4

Un serveur Web

Une installation standard

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 48

Page 49: PHP5 et Zend Framework

Installation de Zend Framework 1/2

• Arborescence minimale

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 49

Page 50: PHP5 et Zend Framework

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());

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 50

Page 51: PHP5 et Zend Framework

PRÉSENTATION DE QUELQUES CLASSES

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 51

Page 52: PHP5 et Zend Framework

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');

• ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 52

Page 53: PHP5 et Zend Framework

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 "Please upgrade to a newer version of ZF for this exemple.\

n";• } else {• echo "\n\n \t Ready to use Zend Framework!\n";• }• ?>  

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 53

Page 54: PHP5 et Zend Framework

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'); ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 54

Page 55: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 55

Page 56: PHP5 et Zend Framework

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); … ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 56

Page 57: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 57

Page 58: PHP5 et Zend Framework

L’ARCHITECTURE MVC

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 58

Page 59: PHP5 et Zend Framework

L’architecture MVC 1/7

• MVC = Model View Controller

• 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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 59

Page 60: PHP5 et Zend Framework

L’architecture MVC 2/7

• Représentation graphique du model

mercredi 12 avril 2023Zend Framework Présenté par Ndjido Ardo BAR | Page 60

Page 61: PHP5 et Zend Framework

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é.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 61

Zend_Controler_Front

Page 62: PHP5 et Zend Framework

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'); ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 62

Répertoire contenant la classe

du contrôleur

Page 63: PHP5 et Zend Framework

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 indexAction(){ } public function addAction(){ } public function editAction(){} public function deleteAction(){ } } ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 63

Page 64: PHP5 et Zend Framework

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 = "Contact"; protected $_primary = "Id"; } ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 64

Page 65: PHP5 et Zend Framework

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(); … ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 65

Page 66: PHP5 et Zend Framework

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 »

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 66

Page 67: PHP5 et Zend Framework

MOTEUR DE TEMPLATE: SMARTY

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 67

Page 68: PHP5 et Zend Framework

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

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 68

Page 69: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 69

SMARTY

Page 70: PHP5 et Zend Framework

Moteur de template 3/6

• Exemple de code de gabarit … <div id="content"> <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>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 70

Page 71: PHP5 et Zend Framework

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.

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 71

Page 72: PHP5 et Zend Framework

Moteur de template 5/6

• Insersion de SMARTY dans l’objet Zend_View <?php include_once "Smarty/Smarty.class.php"; 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); … ?>

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 72

Page 73: PHP5 et Zend Framework

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("index.tpl"); }

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 73

Page 74: PHP5 et Zend Framework

Conclusion

• Des solutions simples

• Facile à manipuler

• Facile à étendre

• Grande qualité de code

• Evolution très rapide

mercredi 12 avril 2023

Zend Framework Présenté par Ndjido Ardo BAR | Page 74

Page 75: PHP5 et Zend Framework

Copyright © 2007, Zend Technologies Inc.

MERCI

KEEP ON USING FRAMEWORKS