PHP5 et Zend Framework
-
Upload
ndjido-ardo-bar -
Category
Technology
-
view
9.006 -
download
0
Transcript of 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]
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
GÉNÉRALITÉS SUR PHP
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 3
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
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
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
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
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
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
PHP 5 : LES NOUVEAUTÉS
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 10
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
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
PHP 5 & LE PARADIGME OBJET
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 13
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
LES DESIGN PATTERNS
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 30
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
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
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
Les DESIGN PATTERN 4/6
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 34
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.
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 35
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
INTRODUCTION AU ZEND FRAMEWORK
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 37
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!!
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
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
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:
Aperçu de l’API
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 42
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
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
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
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
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
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
Installation de Zend Framework 1/2
• Arborescence minimale
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 49
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
PRÉSENTATION DE QUELQUES CLASSES
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 51
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
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
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
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
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
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
L’ARCHITECTURE MVC
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 58
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
L’architecture MVC 2/7
• Représentation graphique du model
mercredi 12 avril 2023Zend Framework Présenté par Ndjido Ardo BAR | Page 60
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
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
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
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
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
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
MOTEUR DE TEMPLATE: SMARTY
mercredi 12 avril 2023
Zend Framework Présenté par Ndjido Ardo BAR | Page 67
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
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
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
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
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
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
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
Copyright © 2007, Zend Technologies Inc.
MERCI
KEEP ON USING FRAMEWORKS