MVC Hello World
This commit is contained in:
parent
c3bc6cc2d0
commit
9dd72d1361
13
Controleurs/ControleurHelloworld.php
Normal file
13
Controleurs/ControleurHelloworld.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
final class ControleurHelloworld
|
||||||
|
{
|
||||||
|
public function defautAction()
|
||||||
|
{
|
||||||
|
$S_helloworld = new Helloworld();
|
||||||
|
|
||||||
|
Vue::montrer('helloworld/voir', array('helloworld' => $S_helloworld->donneMessage()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
12
Modele/Helloworld.php
Normal file
12
Modele/Helloworld.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
final class Helloworld
|
||||||
|
{
|
||||||
|
private $_S_message = "Hello World";
|
||||||
|
|
||||||
|
public function donneMessage()
|
||||||
|
{
|
||||||
|
return $this->_S_message ;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
47
Noyau/ChargementAuto.php
Normal file
47
Noyau/ChargementAuto.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require 'Noyau/Constantes.php';
|
||||||
|
|
||||||
|
final class ChargementAuto
|
||||||
|
{
|
||||||
|
public static function chargerClassesNoyau ($S_nomDeClasse)
|
||||||
|
{
|
||||||
|
$S_fichier = Constantes::repertoireNoyau() . "$S_nomDeClasse.php";
|
||||||
|
return static::_charger($S_fichier);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function chargerClassesModele ($S_nomDeClasse)
|
||||||
|
{
|
||||||
|
$S_fichier = Constantes::repertoireModele() . "$S_nomDeClasse.php";
|
||||||
|
|
||||||
|
return static::_charger($S_fichier);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static function chargerClassesVue ($S_nomDeClasse)
|
||||||
|
{
|
||||||
|
$S_fichier = Constantes::repertoireVues() . "$S_nomDeClasse.php";
|
||||||
|
|
||||||
|
return static::_charger($S_fichier);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function chargerClassesControleur ($S_nomDeClasse)
|
||||||
|
{
|
||||||
|
$S_fichier = Constantes::repertoireControleurs() . "$S_nomDeClasse.php";
|
||||||
|
|
||||||
|
return static::_charger($S_fichier);
|
||||||
|
}
|
||||||
|
private static function _charger ($S_fichierACharger)
|
||||||
|
{
|
||||||
|
if (is_readable($S_fichierACharger))
|
||||||
|
{
|
||||||
|
require $S_fichierACharger;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// J'empile tout ce beau monde comme j'ai toujours appris à le faire...
|
||||||
|
spl_autoload_register('ChargementAuto::chargerClassesNoyau');
|
||||||
|
spl_autoload_register('ChargementAuto::chargerClassesModele');
|
||||||
|
spl_autoload_register('ChargementAuto::chargerClassesVue');
|
||||||
|
spl_autoload_register('ChargementAuto::chargerClassesControleur');
|
||||||
40
Noyau/Constantes.php
Normal file
40
Noyau/Constantes.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Rappel : nous sommes dans le répertoire Core, voilà pourquoi dans realpath je "remonte d'un cran" pour faire référence
|
||||||
|
// à la VRAIE racine de mon application
|
||||||
|
|
||||||
|
final class Constantes
|
||||||
|
{
|
||||||
|
// Les constantes relatives aux chemins
|
||||||
|
|
||||||
|
const REPERTOIRE_VUES = '/Vues/';
|
||||||
|
|
||||||
|
const REPERTOIRE_MODELE = '/Modele/';
|
||||||
|
|
||||||
|
const REPERTOIRE_NOYAU = '/Noyau/';
|
||||||
|
|
||||||
|
const REPERTOIRE_CONTROLEURS = '/Controleurs/';
|
||||||
|
|
||||||
|
|
||||||
|
public static function repertoireRacine() {
|
||||||
|
return realpath(__DIR__ . '/../');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function repertoireNoyau() {
|
||||||
|
return self::repertoireRacine() . self::REPERTOIRE_NOYAU;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function repertoireVues() {
|
||||||
|
return self::repertoireRacine() . self::REPERTOIRE_VUES;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function repertoireModele() {
|
||||||
|
return self::repertoireRacine() . self::REPERTOIRE_MODELE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function repertoireControleurs() {
|
||||||
|
return self::repertoireRacine() . self::REPERTOIRE_CONTROLEURS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
35
Noyau/Controleur.php
Normal file
35
Noyau/Controleur.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
final class Controleur
|
||||||
|
{
|
||||||
|
private $_A_urlDecortique;
|
||||||
|
|
||||||
|
public function __construct ($S_controleur, $S_action)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (empty($S_controleur)) {
|
||||||
|
// Nous avons pris le parti de préfixer tous les controleurs par "Controleur"
|
||||||
|
$this->_A_urlDecortique['controleur'] = 'ControleurDefaut';
|
||||||
|
} else {
|
||||||
|
$this->_A_urlDecortique['controleur'] = 'Controleur' . ucfirst($S_controleur);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($S_action)) {
|
||||||
|
// L'action est vide ! On la valorise par défaut
|
||||||
|
$this->_A_urlDecortique['action'] = 'defautAction';
|
||||||
|
} else {
|
||||||
|
// On part du principe que toutes nos actions sont suffixées par 'Action'...à nous de le rajouter
|
||||||
|
$this->_A_urlDecortique['action'] = $S_action . 'Action';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// On exécute
|
||||||
|
public function executer()
|
||||||
|
{
|
||||||
|
//fonction de rappel de notre controleur cible (ControleurHelloworld pour notre premier exemple)
|
||||||
|
call_user_func_array(array(new $this->_A_urlDecortique['controleur'],
|
||||||
|
$this->_A_urlDecortique['action']), array());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
27
Noyau/Vue.php
Normal file
27
Noyau/Vue.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
final class Vue
|
||||||
|
{
|
||||||
|
public static function ouvrirTampon()
|
||||||
|
{
|
||||||
|
// On démarre le tampon de sortie, on va l'appeler "tampon principal"
|
||||||
|
ob_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function recupererContenuTampon()
|
||||||
|
{
|
||||||
|
// On retourne le contenu du tampon principal
|
||||||
|
return ob_get_clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function montrer ($S_localisation, $A_parametres = array())
|
||||||
|
{
|
||||||
|
$S_fichier = Constantes::repertoireVues() . $S_localisation . '.php';
|
||||||
|
|
||||||
|
$A_vue = $A_parametres;
|
||||||
|
// Démarrage d'un sous-tampon
|
||||||
|
ob_start();
|
||||||
|
include $S_fichier; // c'est dans ce fichier que sera utilisé A_vue, la vue est inclue dans le sous-tampon
|
||||||
|
ob_end_flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Vues/gabarit.php
Normal file
12
Vues/gabarit.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>My sweet MVC</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<?php Vue::montrer('standard/entete'); ?>
|
||||||
|
<?php echo $A_vue['body'] ?>
|
||||||
|
<?php Vue::montrer('standard/pied'); ?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
3
Vues/helloworld/voir.php
Normal file
3
Vues/helloworld/voir.php
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
echo "<p>" . $A_vue['helloworld'] . "</p>";
|
||||||
2
Vues/standard/entete.php
Normal file
2
Vues/standard/entete.php
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<?php
|
||||||
|
echo '<header> <h1>Titre</h1></header>';
|
||||||
1
Vues/standard/pied.php
Normal file
1
Vues/standard/pied.php
Normal file
@ -0,0 +1 @@
|
|||||||
|
<footer>Pied</footer>
|
||||||
21
index.php
Normal file
21
index.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
// Ce fichier est le point d'entrée de votre application
|
||||||
|
|
||||||
|
require 'Noyau/ChargementAuto.php';
|
||||||
|
/*
|
||||||
|
url pour notre premier test MVC Hello World,
|
||||||
|
nous n'avons pas d'action précisée on visera celle par défaut
|
||||||
|
index.php?ctrl=helloworld
|
||||||
|
*/
|
||||||
|
$S_controleur = isset($_GET['ctrl']) ? $_GET['ctrl'] : null;
|
||||||
|
$S_action = isset($_GET['action']) ? $_GET['action'] : null;
|
||||||
|
|
||||||
|
Vue::ouvrirTampon(); // /Noyau/Vue.php : on ouvre le tampon d'affichage, les contrôleurs qui appellent des vues les mettront dedans
|
||||||
|
$O_controleur = new Controleur($S_controleur, $S_action);
|
||||||
|
$O_controleur->executer();
|
||||||
|
|
||||||
|
// Les différentes sous-vues ont été "crachées" dans le tampon d'affichage, on les récupère
|
||||||
|
$contenuPourAffichage = Vue::recupererContenuTampon();
|
||||||
|
|
||||||
|
// On affiche le contenu dans la partie body du gabarit général
|
||||||
|
Vue::montrer('gabarit', array('body' => $contenuPourAffichage));
|
||||||
Loading…
Reference in New Issue
Block a user