Routage et exceptions
This commit is contained in:
parent
6c89f92be2
commit
bdcdd70c36
@ -5,9 +5,15 @@ final class ControleurHelloworld
|
|||||||
public function defautAction()
|
public function defautAction()
|
||||||
{
|
{
|
||||||
$O_helloworld = new Helloworld();
|
$O_helloworld = new Helloworld();
|
||||||
|
|
||||||
Vue::montrer('helloworld/voir', array('helloworld' => $O_helloworld->donneMessage()));
|
Vue::montrer('helloworld/voir', array('helloworld' => $O_helloworld->donneMessage()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
public function testformAction(Array $A_parametres = null, Array $A_postParams = null)
|
||||||
|
{
|
||||||
|
|
||||||
|
Vue::montrer('helloworld/testform', array('formData' => $A_postParams));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -10,6 +10,13 @@ final class ChargementAuto
|
|||||||
return static::_charger($S_fichier);
|
return static::_charger($S_fichier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function chargerClassesException ($S_nomDeClasse)
|
||||||
|
{
|
||||||
|
$S_fichier = Constantes::repertoireExceptions() . "$S_nomDeClasse.php";
|
||||||
|
|
||||||
|
return static::_charger($S_fichier);
|
||||||
|
}
|
||||||
|
|
||||||
public static function chargerClassesModele ($S_nomDeClasse)
|
public static function chargerClassesModele ($S_nomDeClasse)
|
||||||
{
|
{
|
||||||
$S_fichier = Constantes::repertoireModele() . "$S_nomDeClasse.php";
|
$S_fichier = Constantes::repertoireModele() . "$S_nomDeClasse.php";
|
||||||
@ -42,6 +49,7 @@ final class ChargementAuto
|
|||||||
|
|
||||||
// J'empile tout ce beau monde comme j'ai toujours appris à le faire...
|
// J'empile tout ce beau monde comme j'ai toujours appris à le faire...
|
||||||
spl_autoload_register('ChargementAuto::chargerClassesNoyau');
|
spl_autoload_register('ChargementAuto::chargerClassesNoyau');
|
||||||
|
spl_autoload_register('ChargementAuto::chargerClassesException');
|
||||||
spl_autoload_register('ChargementAuto::chargerClassesModele');
|
spl_autoload_register('ChargementAuto::chargerClassesModele');
|
||||||
spl_autoload_register('ChargementAuto::chargerClassesVue');
|
spl_autoload_register('ChargementAuto::chargerClassesVue');
|
||||||
spl_autoload_register('ChargementAuto::chargerClassesControleur');
|
spl_autoload_register('ChargementAuto::chargerClassesControleur');
|
||||||
|
@ -13,6 +13,8 @@ final class Constantes
|
|||||||
|
|
||||||
const REPERTOIRE_NOYAU = '/Noyau/';
|
const REPERTOIRE_NOYAU = '/Noyau/';
|
||||||
|
|
||||||
|
const REPERTOIRE_EXCEPTIONS = '/Noyau/Exceptions/';
|
||||||
|
|
||||||
const REPERTOIRE_CONTROLEURS = '/Controleurs/';
|
const REPERTOIRE_CONTROLEURS = '/Controleurs/';
|
||||||
|
|
||||||
|
|
||||||
@ -24,6 +26,10 @@ final class Constantes
|
|||||||
return self::repertoireRacine() . self::REPERTOIRE_NOYAU;
|
return self::repertoireRacine() . self::REPERTOIRE_NOYAU;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function repertoireExceptions() {
|
||||||
|
return self::repertoireRacine() . self::REPERTOIRE_EXCEPTIONS;
|
||||||
|
}
|
||||||
|
|
||||||
public static function repertoireVues() {
|
public static function repertoireVues() {
|
||||||
return self::repertoireRacine() . self::REPERTOIRE_VUES;
|
return self::repertoireRacine() . self::REPERTOIRE_VUES;
|
||||||
}
|
}
|
||||||
|
@ -4,32 +4,69 @@ final class Controleur
|
|||||||
{
|
{
|
||||||
private $_A_urlDecortique;
|
private $_A_urlDecortique;
|
||||||
|
|
||||||
public function __construct ($S_controleur, $S_action)
|
private $_A_urlParametres;
|
||||||
{
|
|
||||||
|
|
||||||
if (empty($S_controleur)) {
|
private $_A_postParams;
|
||||||
// Nous avons pris le parti de préfixer tous les controleurs par "Controleur"
|
|
||||||
$this->_A_urlDecortique['controleur'] = 'ControleurDefaut';
|
public function __construct ($S_url, $A_postParams)
|
||||||
} else {
|
{
|
||||||
$this->_A_urlDecortique['controleur'] = 'Controleur' . ucfirst($S_controleur);
|
// On élimine l'éventuel slash en fin d'URL sinon notre explode renverra une dernière entrée vide
|
||||||
|
if ('/' == substr($S_url, -1, 1)) {
|
||||||
|
$S_url = substr($S_url, 0, strlen($S_url) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($S_action)) {
|
// On éclate l'URL, elle va prendre place dans un tableau
|
||||||
|
$A_urlDecortique = explode('/', $S_url);
|
||||||
|
|
||||||
|
if (empty($A_urlDecortique[0])) {
|
||||||
|
// Nous avons pris le parti de préfixer tous les controleurs par "Controleur"
|
||||||
|
$A_urlDecortique[0] = 'ControleurDefaut';
|
||||||
|
} else {
|
||||||
|
$A_urlDecortique[0] = 'Controleur' . ucfirst($A_urlDecortique[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($A_urlDecortique[1])) {
|
||||||
// L'action est vide ! On la valorise par défaut
|
// L'action est vide ! On la valorise par défaut
|
||||||
$this->_A_urlDecortique['action'] = 'defautAction';
|
$A_urlDecortique[1] = 'defautAction';
|
||||||
} else {
|
} else {
|
||||||
// On part du principe que toutes nos actions sont suffixées par 'Action'...à nous de le rajouter
|
// On part du principe que toutes nos actions sont suffixées par 'Action'...à nous de le rajouter
|
||||||
$this->_A_urlDecortique['action'] = $S_action . 'Action';
|
$A_urlDecortique[1] = $A_urlDecortique[1] . 'Action';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
// on dépile 2 fois de suite depuis le début, c'est à dire qu'on enlève de notre tableau le contrôleur et l'action
|
||||||
// On exécute
|
// il ne reste donc que les éventuels parametres (si nous en avons)...
|
||||||
public function executer()
|
$this->_A_urlDecortique['controleur'] = array_shift($A_urlDecortique); // on recupere le contrôleur
|
||||||
{
|
$this->_A_urlDecortique['action'] = array_shift($A_urlDecortique); // puis l'action
|
||||||
//fonction de rappel de notre controleur cible (ControleurHelloworld pour notre premier exemple)
|
|
||||||
call_user_func_array(array(new $this->_A_urlDecortique['controleur'],
|
// ...on stocke ces éventuels parametres dans la variable d'instance qui leur est réservée
|
||||||
$this->_A_urlDecortique['action']), array());
|
$this->_A_urlParametres = $A_urlDecortique;
|
||||||
|
|
||||||
|
// On s'occupe du tableau $A_postParams
|
||||||
|
$this->_A_postParams = $A_postParams;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// On exécute notre triplet
|
||||||
|
|
||||||
|
public function executer()
|
||||||
|
{
|
||||||
|
if (!class_exists($this->_A_urlDecortique['controleur'])) {
|
||||||
|
throw new ControleurException($this->_A_urlDecortique['controleur'] . " n'est pas un controleur valide.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!method_exists($this->_A_urlDecortique['controleur'], $this->_A_urlDecortique['action'])) {
|
||||||
|
throw new ControleurException($this->_A_urlDecortique['action'] . " du contrôleur " .
|
||||||
|
$this->_A_urlDecortique['controleur'] . " n'est pas une action valide.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$B_called = call_user_func_array(array(new $this->_A_urlDecortique['controleur'],
|
||||||
|
$this->_A_urlDecortique['action']), array($this->_A_urlParametres, $this->_A_postParams ));
|
||||||
|
|
||||||
|
if (false === $B_called) {
|
||||||
|
throw new ControleurException("L'action " . $this->_A_urlDecortique['action'] .
|
||||||
|
" du contrôleur " . $this->_A_urlDecortique['controleur'] . " a rencontré une erreur.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
3
Noyau/Exceptions/ControleurException.php
Normal file
3
Noyau/Exceptions/ControleurException.php
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ControleurException extends Exception {}
|
8
Vues/helloworld/testform.php
Normal file
8
Vues/helloworld/testform.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
// Tout cela à des fin de test uniquement
|
||||||
|
echo var_dump($A_vue['formData']);
|
||||||
|
|
||||||
|
echo '<form action="" method="post">';
|
||||||
|
echo '<input type="text" name="test" id="test">';
|
||||||
|
echo '<input type="submit" value="tester">';
|
||||||
|
echo '</form>';
|
@ -1,3 +1,3 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
echo "<p>" . $A_vue['helloworld'] . "</p>";
|
echo "<p>" . $A_vue['helloworld'] . "</p>";
|
||||||
|
24
index.php
24
index.php
@ -5,14 +5,34 @@
|
|||||||
/*
|
/*
|
||||||
url pour notre premier test MVC Hello World,
|
url pour notre premier test MVC Hello World,
|
||||||
nous n'avons pas d'action précisée on visera celle par défaut
|
nous n'avons pas d'action précisée on visera celle par défaut
|
||||||
index.php?ctrl=helloworld
|
/index.php?ctrl=helloworld
|
||||||
|
/helloworld
|
||||||
|
/controleur/nom_action/whatever/whatever2/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
$S_controleur = isset($_GET['ctrl']) ? $_GET['ctrl'] : null;
|
$S_controleur = isset($_GET['ctrl']) ? $_GET['ctrl'] : null;
|
||||||
$S_action = isset($_GET['action']) ? $_GET['action'] : 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
|
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 = new Controleur($S_controleur, $S_action);
|
||||||
$O_controleur->executer();
|
*/
|
||||||
|
|
||||||
|
$S_urlADecortiquer = isset($_GET['url']) ? $_GET['url'] : null;
|
||||||
|
$A_postParams = isset($_POST) ? $_POST : null;
|
||||||
|
|
||||||
|
Vue::ouvrirTampon(); // on ouvre le tampon d'affichage, les contrôleurs qui appellent des vues les mettront dedans
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$O_controleur = new Controleur($S_urlADecortiquer, $A_postParams);
|
||||||
|
$O_controleur->executer();
|
||||||
|
}
|
||||||
|
catch (ControleurException $O_exception)
|
||||||
|
{
|
||||||
|
echo ('Une erreur s\'est produite : ' . $O_exception->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Les différentes sous-vues ont été "crachées" dans le tampon d'affichage, on les récupère
|
// Les différentes sous-vues ont été "crachées" dans le tampon d'affichage, on les récupère
|
||||||
$contenuPourAffichage = Vue::recupererContenuTampon();
|
$contenuPourAffichage = Vue::recupererContenuTampon();
|
||||||
|
Loading…
Reference in New Issue
Block a user