Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework



Documents pareils
PHP et les Bases de données - Généralités

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Stockage du fichier dans une table mysql:

PHP 5. La base de données MySql. A. Belaïd 1

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

CREATION WEB DYNAMIQUE

Pratique et administration des systèmes

Partie 0 : Gestion des tablespace et des utilisateurs... 3

SQL Historique

SYSTÈMES D INFORMATIONS

Mysql avec EasyPhp. 1 er mars 2006

1. Base de données SQLite

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Ecriture d'un Plugin pour GLPI

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Gestion de base de données

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Séance d ED n 5 : HTML et JavaScript

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Olivier Mondet

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Bases de données relationnelles

Formulaire pour envoyer un mail

Cours Bases de données 2ème année IUT

Présentation Windows Azure Hadoop Big Data - BI

I. MySQL : Serveur et SGBD

PHP 4 PARTIE : BASE DE DONNEES

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

DOM - Document Object Model

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Le Langage SQL version Oracle

Historisation des données

PDO : PHP Data Object 1/13

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

SUPPORT DE COURS / PHP PARTIE 3

Compétences Business Objects

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Rapport de projet Site web pour une association

Application web de gestion de comptes en banques

DEVAKI NEXTOBJET PRESENTATION. Devaki Nextobjects est un projet sous license GNU/Public.

Installation d'un serveur FTP géré par une base de données MySQL

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

Les BASES de DONNEES dans WampServer

1 Position du problème

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Langage SQL : créer et interroger une base

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Présentation du Framework BootstrapTwitter

CREATION d UN SITE WEB (INTRODUCTION)

Mysql. Les requêtes préparées Prepared statements

UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE

Initiation à html et à la création d'un site web

1 Introduction et installation

équipement radio Procédure

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

TP JAVASCRIPT OMI4 TP5 SRC

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Le stockage local de données en HTML5

Corrigés détaillés des exercices

Introduction à JDBC. Accès aux bases de données en Java

Ecole Polytechnique de Louvain INGI Fichiers et bases de données

Module BD et sites WEB

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Attaques de type. Brandon Petty

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

A QUOI SERVENT LES BASES DE DONNÉES?

OpenPaaS Le réseau social d'entreprise

Tutoriel : Feuille de style externe

Nuxeo 5.4 : les nouveautés

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

Flex. Lire les données de manière contrôlée. Programmation Flex 4 Aurélien VANNIEUWENHUYZE

MRTG & RRD Tool. Multi Router Traffic Grapher

Sommaire. 1 Introduction Présentation du logiciel de commerce électronique 23

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Attaques applicatives

Conception d'un système d'information WEB avec UML Par Ass SERGE KIKOBYA

25 mars. Tutoriel sur Laravel. Préparé par : Lydiane Beaulne-Bélisle. Ceci est un tutorial qui montre comment débuter avec le Framework PHP Laravel.

Technologie Web. Conception de sites Web. Alexandre Pauchet. INSA Rouen - Département ASI. INSA - ASI TechnoWeb : Rappels UML 1/21

Rapport de stage - SponsorBoost

PROJET 1 : BASE DE DONNÉES REPARTIES

Dans l'article précédent, vous avez appris

Etude et développement d un moteur de recherche

Création et Gestion des tables

BASES DE DONNEES TP POSTGRESQL

Introduction. Passage de sites statiques à des sites dynamiques

Rapport de stage Nicolas PLAZE Licence Pro A2I. Rapport de Stage LICENCE PRO A2I. Société INFHOTIK. Nicolas PLAZE

Java Licence Professionnelle CISII,

Transcription:

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework L'objectif de ce document est de poser des bases de réflexion sur la modélisation d'un projet réalisé en langage PHP orienté objet. La finalité est de réaliser ce projet en créant un mini framework basé sur le modèle MVC (Modèle Vue Contrôleur). I - LE MODELE MVC (Modèle Vue Contrôleur) MVC (Modèle Vue Contrôleur) a pour objectif d'organiser la réalisation de l'application et à séparer complètement la présentation (Vue) des données (Modèle) et des traitements (Contrôleur). On définit le rôle des trois entités de la façon suivante : Modèle : c'est la logique métier de l'application ; Vue : définit l'interface utilisateur ; Contrôleur : prends en charge la gestion des évènements pour mettre à jour la vue ou le modèle. Le mini framework proposé dispose d'une couche supplémentaire (Dispatcher), permettant d'aiguiller les actions du contrôleur en fonction des choix de l'utilisateur. II - LE MODELE UML DE L'APPLICATION ETUDIEE On se propose d'étudier une application permettant de gérer un parc de machines. Les machines seront caractérisées par : un nom ; une adresse IP; une adresse MAC ; une localisation (salle). Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 1/17

II.1 Diagramme des cas d'utilisation II.2 Diagramme des classes II.3 Diagramme de séquences Cas d'utilisation «Initialiser» Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 2/17

Cas d'utilisation «Visualiser les machines» Cas d'utilisation «Rechercher des machines» Cas d'utilisation «Visualiser les machines sous forme graphique» Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 3/17

III - REALISATION DE L'APPLICATION III.1 Les fichiers L'arborescence du projet est la suivante : Conformément à la modélisation, nous allons créer 5 pages en relation avec un seul contrôleur et 4 actions : Dispatcher Page Contrôleur Action index.php views/parc/index.php controlers/parc.php parc::index listage.php views/parc/recherche.php controlers/parc.php parc::recherche recherche.php views/parc/recherche.php controlers/parc.php parc::recherche formip.php views/parc/formip.php controlers/parc.php parc::formip affichage views/parc/affiche.php controlers/parc.php parc::affiche Lorsque qu'on se connecte au site on appelle le dispatcher index.php qui sollicite l'action index du contrôleur controlers/parc.php. Ceci se traduit par l'affichage de la page views/parc/index.php. L'utilisateur a 3 choix : Listage : On appelle le dispatcher listage.php qui sollicite l'action recherche du contrôleur controlers/parc.php. Ceci se traduit par l'affichage de la page views/parc/recherche.php. Recherche : On appelle le dispatcher formip.php qui sollicite l'action formip du contrôleur controlers/parc.php. Ceci se traduit par l'affichage du formulaire views/parc/formip.php. Lors de la validation du formulaire, on appelle le dispatcher Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 4/17

recherche.php (en lui passant les paramètres saisis) qui sollicite l'action recherche du contrôleur controlers/parc.php. Ceci se traduit par l'affichage de la page views/parc/recherche.php. Affichage : On appelle le dispatcher affichage.php qui sollicite l'action affiche du contrôleur controlers/parc.php. Ceci se traduit d'abord par la création d'une image au format png à l'aide de la librairie jpgraph puis par l'affichage de la page views/parc/affiche.php qui se charge d'afficher cette image. Remarques : Les différentes pages sont constituées du squelette contenu dans la page views/layout/default.php. III.2 Sources 3.2.1 Dispatchers // commun.php // code commun a tous les dispatchers //WIN32 //define('root', 'C://wamp/www/parc/'); // LINUX define('root', '/var/www/www/parc/'); define('webroot', ''); // On inclut les fichiers de Core require(root.'core/model.php'); require(root.'core/controller.php'); //echo 'Connexion a la BDD'; mysql_connect('localhost','root','****'); mysql_select_db('parc'); // On inclut le controleur require('./controllers/parc.php'); // On initialise le controleur $controller = new parc(); // index.php // Dispatcher principal //On inclut le fichier commun Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 5/17

require('commun.php'); // On appelle l'action du controleur $controller->index(); //listage.php // Dispatcher secondaire // On inclut le fichier commun require('commun.php'); // On appelle l'action du controleur $controller->recherche(""); //recherche.php // Dispatcher secondaire // On inclut le fichier commun require('commun.php'); // On recupere les donnees du formulaire extract ($_POST); // On appelle l'action du controleur $controller->recherche($addip); //formip.php // Dispatcher secondaire // On inclut le fichier commun require('commun.php'); // On appelle l'action du controleur $controller->formip(); //affichage.php // Dispatcher secondaire Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 6/17

// On inclut le fichier commun require('commun.php'); // On appelle l'action du controleur $controller->affiche(); 3.2.2 Pages (vues) //views/layout/default.php <HTML> <HEAD> <TITLE> Parc </TITLE> </HEAD> <BODY> <h1>bts IRIS - Gestion du parc de machines</h1> echo $content_for_layout; <p> <a href=" echo WEBROOT; index.php"> echo 'acceuil'; </a> </p> <BODY> </HTML> //views/parc/index.php <h2> <a href=" echo WEBROOT; listage.php"> echo 'Listage'; </a> </h2> <h2> <a href=" echo WEBROOT; formip.php"> echo 'Recherche'; </a> </h2> <h2> <a href=" echo WEBROOT; affichage.php"> echo 'Affichage'; </a> </h2> //views/parc/recherche.php <h2> <a> echo "Affichage des Machines</br>"; </a> </h2> Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 7/17

echo "<table border=1 width=\"100%\">"; $liste_indices=array_keys((array)$record[0]); echo "<tr>"; while($indice=each($liste_indices)) { echo "<td align=center>"; echo $indice['value']; echo "</td>"; echo "</tr>"; foreach((array)$record as $cle_tableau=>$ligne) { echo "<tr>"; foreach($ligne as $cle=>$valeur) { echo "<td align=center>"; echo $valeur; echo "</td>"; echo "</tr>"; echo "</table>"; //views/parc/formip.php <body> <h2> Selection d'une machine dans le domaine</h2> <form name="formip" method="post" action=" echo WEBROOT; recherche.php"> <p>adresse IP :</p> <p><input name="addip" size="15" maxlength="15" type="text"></p> <p><input value="rechercher" type="submit"></p> </form> </body> //views/parc/affiche.php <img src="/images/monimage.png"/> Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 8/17

3.2.3 Le contrôleur //controllers/parc.php class parc extends Controller{ var $models = array('bddparc'); //Action index function index(){ $this->render('index'); function recherche($ip){ $d['record'] = $this->bddparc->query("select id, ip, mac, nom, salle FROM machines WHERE ip LIKE '$ip%' ORDER BY ip ASC"); //print_r($d); $this->set($d); $this->render('recherche'); function affiche(){ require_once ('./jpgraph/jpgraph.php'); require_once ('./jpgraph/jpgraph_line.php'); require_once ('./jpgraph/jpgraph_bar.php'); $nb = 15; // On affiche l'id des 15 derniers enregistrements $var=id; $d['record'] = $this->bddparc->getlast($nb); $this->set($d); for ($i=0; $i<$nb; $i++) { $donnees[$i] = $d['record'][$i][$var]; //print_r($donnees); $largeur = 500; $hauteur = 400; // Initialisation du graphique $graphe = new Graph($largeur, $hauteur); // Echelle lineaire ('lin') en ordonnee et pas de valeur en abscisse ('text') // Valeurs min et max seront determinees automatiquement Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 9/17

$graphe->setscale("textlin"); // Creation de l'histogramme $histo = new BarPlot($donnees); //$histo = new BarPlot($d['record']['id']); // Ajout de l'histogramme au graphique $graphe->add($histo); // Ajout du titre du graphique $graphe->title->set("histogramme"); // Affichage du graphique $graphe->stroke("/var/www/images/monimage.png"); // on enregistre l'image //imagepng($graphe, "/var/www/images/monimage.png"); $this->render('affiche'); function formip(){ $this->render('formip'); 3.2.4 Le modèle //models/bddparc.php class BddParc extends Model{ var $table = 'machines'; //nom de la table function getlast($num){ return $this->find(array( 'limit' => $num, 'order' => 'id DESC' )); Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 10/17

3.2.5 Le contrôleur et le modèle générique commun à chaque projet //core/controller.php class Controller{ var $vars = array(); var $layout = 'default'; function construct(){ if(isset($_post)){ $this->data = $_POST; if(isset($this->models)){ foreach($this->models as $v){ $this->loadmodel($v); function set($d){ $this->vars = array_merge($this->vars,$d); // inclusion du fichier passé en paramètre function render($filename){ extract($this->vars); ob_start(); require(root.'views/'.get_class($this).'/'.$filename.'.php'); $content_for_layout = ob_get_clean(); if($this->layout==false){ echo $content_for_layout; else{ require(root.'views/layout/'.$this->layout.'.php'); function loadmodel($name){ require_once(root.'models/'.strtolower($name).'.php'); $this->$name = new $name(); Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 11/17

//core/model.php /** * Objet Model * Permet les interactions avec la base de donnees * */ class Model{ public $table; public $id; /** * Lit une ligne dans la base de donnees par rapport a l'id de l'objet * @param $fields Liste des champs a recuperer * */ public function read($fields=null){ if($fields==null){ $fields = "*"; $sql = "SELECT $fields FROM ".$this->table." WHERE id=".$this->id ; $req = mysql_query($sql) or die(mysql_error()."<br/> => ".mysql_query()); $data = mysql_fetch_assoc($req); foreach($data as $k=>$v){ /** $this->$k = $v; * Permet de recuperer plusieurs lignes dans la BDD * @param $data conditions de recuperations * */ public function find($data=array()){ $conditions = "1=1"; $fields = "*"; $limit = ""; $order = "id DESC"; extract($data); if(isset($data["limit"])){ $limit = "LIMIT ".$data["limit"]; $sql = "SELECT $fields FROM ".$this->table." WHERE $conditions ORDER BY $order $limit"; $req = mysql_query($sql) or die(mysql_error()."<br/> => ".$sql); $d = array(); Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 12/17

while($data = mysql_fetch_assoc($req)){ $d[] = $data; return $d; /** * Permet de faire une requete complexe * @param $sql Requete a effectuer * */ public function query($sql){ $req = mysql_query($sql) or die(mysql_error()."<br/> => ".$sql); $d = array(); while($data = mysql_fetch_assoc($req)){ $d[] = $data; return $d; /** * Permet de charger un model * @param $name Nom du modele a charger * */ static function load($name){ require("$name.php"); return new $name(); Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 13/17

III.3 Mise en place de la BDD Il faut créer une base nommée parc contenant une table nommée machines. A l'aide de phpmyadmin on exécute la requête SQL suivante : -- -- Creation de la table `machines` dans la base `parc` -- CREATE DATABASE IF NOT EXISTS `parc`; CREATE TABLE IF NOT EXISTS `parc`.`machines` ( `id` int(11) NOT NULL auto_increment, `ip` char(15) NOT NULL, `mac` char(17) NOT NULL, `nom` char(15) NOT NULL, `salle` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=82 ; -- -- Contenu de la table `machines` -- INSERT INTO `parc`.`machines` (`id`, `ip`, `mac`, `nom`, `salle`) VALUES (47, '172.17.5.4', '00:1a:73:7d:e0:eb', 'tsirist-w-jcc', 2), (46, '172.17.5.3', '00:00:6c:c7:6b:51', 'tsirist-p-jcc', 2), (45, '172.17.5.2', '00:14:6c:65:86:ab', 'tsirist-w-remy', 2), (44, '172.17.5.1', '00:a0:d1:b0:47:38', 'tsirist-p-remy', 2), (16, '172.17.4.21', '00:0d:56:c2:f2:5a', 'tsirist-01', 2), Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 14/17

(17, '172.17.4.22', '00:0d:56:c2:f3:a7', 'tsirist-02', 1), (18, '172.17.4.23', '00:0d:56:c2:e8:4d', 'tsirist-03', 1), (19, '172.17.4.24', '00:0d:56:c2:f1:b3', 'tsirist-04', 1), (20, '172.17.4.25', '00:0d:56:c2:f4:26', 'tsirist-05', 1), (21, '172.17.4.26', '00:0d:56:c2:f2:fa', 'tsirist-06', 1), (22, '172.17.4.27', '00:0d:56:c2:f3:ad', 'tsirist-07', 1), (23, '172.17.4.28', '00:11:85:10:f4:bf', 'tsirist-08', 2), (24, '172.17.4.29', '00:11:85:11:01:2b', 'tsirist-09', 1), (25, '172.17.4.30', '00:11:85:14:4e:37', 'tsirist-10', 1), (26, '172.17.4.31', '00:11:85:14:4d:99', 'tsirist-11', 1), (27, '172.17.4.32', '00:11:85:62:71:05', 'tsirist-12', 1), (28, '172.17.4.33', '00:11:85:14:4e:22', 'tsirist-13', 1), (29, '172.17.4.34', '00:11:85:14:4d:ab', 'tsirist-14', 1), (30, '172.17.4.35', '00:0f:b5:85:0c:21', 'tsirist-15', 0), (31, '172.17.4.36', '00:14:85:7d:d2:35', 'tsirist-16', 0), (32, '172.17.4.37', '00:14:85:7a:a9:8c', 'tsirist-17', 0), (79, '172.17.4.38', '00:14:85:7D:CF:AA', 'tsirist-18', 0), (34, '172.17.4.39', '00:14:85:79:78:fa', 'tsirist-19', 0), (77, '172.17.4.40', '00:14:85:7a:78:a3', 'tsirist-20', 0), (80, '172.17.4.41', '00:14:85:79:78:F8', 'tsirist-21', 0), (38, '172.17.4.42', '00:14:85:7a:78:81', 'tsirist-22', 0), (39, '172.17.4.43', '00:14:85:7a:78:dc', 'tsirist-23', 0), (40, '172.17.4.44', '00:14:85:7a:78:a5', 'tsirist-24', 0), (41, '172.17.4.45', '00:14:85:7a:78:de', 'tsirist-25', 0), III.4 Résultats 3.4.1 La page principale Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 15/17

3.4.2 Listage 3.4.3 Recherche Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 16/17

3.4.4 Affichage Remarques : Pour utiliser la librairie graphique gd (donc jpgraph) sous Linux, il est nécessaire de recompiler php ou d'utiliser les dépôts Dotdeb pour avoir la dernière version de php. Le dossier dans lequel est stocké l'image, doit être accessible en lecture et écriture à l'utilisateur www-data. Modélisation PHP Orientée Objet pour les Projets Modèle MVC Mini Framework 17/17