modélisation php orientée objet pour les projets modèle ... · bts iris jean-claude cabianca...
TRANSCRIPT
BTS IRIS Jean-Claude CABIANCA
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
BTS IRIS Jean-Claude CABIANCA
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
BTS IRIS Jean-Claude CABIANCA
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
BTS IRIS Jean-Claude CABIANCA
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
BTS IRIS Jean-Claude CABIANCA
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
<?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
<?php
// Dispatcher principal
//On inclut le fichier commun
Modélisation PHP Orientée Objet pour les Projets – Modèle MVC – Mini Framework 5/17
BTS IRIS Jean-Claude CABIANCA
require('commun.php');
// On appelle l'action du controleur
$controller->index();
?>
//listage.php
<?php
// Dispatcher secondaire
// On inclut le fichier commun
require('commun.php');
// On appelle l'action du controleur
$controller->recherche("");
?>
//recherche.php
<?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
<?php
// Dispatcher secondaire
// On inclut le fichier commun
require('commun.php');
// On appelle l'action du controleur
$controller->formip();
?>
//affichage.php
<?php
// Dispatcher secondaire
Modélisation PHP Orientée Objet pour les Projets – Modèle MVC – Mini Framework 6/17
BTS IRIS Jean-Claude CABIANCA
// 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>
<?php echo $content_for_layout;?>
<p>
<a href="<?php echo WEBROOT; ?>index.php"><?php echo 'acceuil'; ?></a>
</p>
<BODY>
</HTML>
//views/parc/index.php
<h2>
<a href="<?php echo WEBROOT; ?>listage.php"><?php echo 'Listage'; ?></a>
</h2>
<h2>
<a href="<?php echo WEBROOT; ?>formip.php"><?php echo 'Recherche'; ?></a>
</h2>
<h2>
<a href="<?php echo WEBROOT; ?>affichage.php"><?php echo 'Affichage'; ?></a>
</h2>
//views/parc/recherche.php
<h2>
<a><?php echo "Affichage des Machines</br>"; ?></a>
</h2>
Modélisation PHP Orientée Objet pour les Projets – Modèle MVC – Mini Framework 7/17
BTS IRIS Jean-Claude CABIANCA
<?php
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="<?php 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
BTS IRIS Jean-Claude CABIANCA
3.2.3 –Le contrôleur
//controllers/parc.php
<?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
BTS IRIS Jean-Claude CABIANCA
$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
<?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
BTS IRIS Jean-Claude CABIANCA
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
BTS IRIS Jean-Claude CABIANCA
//core/model.php
<?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
BTS IRIS Jean-Claude CABIANCA
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
BTS IRIS Jean-Claude CABIANCA
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
BTS IRIS Jean-Claude CABIANCA
(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
BTS IRIS Jean-Claude CABIANCA
3.4.2 –Listage
3.4.3 –Recherche
Modélisation PHP Orientée Objet pour les Projets – Modèle MVC – Mini Framework 16/17
BTS IRIS Jean-Claude CABIANCA
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