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