Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
/**
* Classe controlleur, coeur d'une application, c'est normalement la seule classe d'une application
* qui devrait être appelée de l'extérieur.
*/
abstract class Controleur {
private $registre;
private $gestionnaire_erreur;
/**
* Constructeur par défaut
*/
final public function __construct() {
$this->registre = Registre::getInstance() ;
$this->registre->set('chemin_config',CHEMIN_APPLI.'configuration'.DIRECTORY_SEPARATOR);
$this->registre->set('base_chemin_modele',DOSSIER_MODELES.DIRECTORY_SEPARATOR);
$this->registre->set('base_chemin_squelette',DOSSIER_SQUELETTES.DIRECTORY_SEPARATOR);
$this->registre->set('base_chemin_controleur',DOSSIER_CONTROLEURS.DIRECTORY_SEPARATOR);
$this->registre->set('bdd_type',BDD_PROTOCOLE) ;
$this->registre->set('bdd_hote',BDD_SERVEUR) ;
$this->registre->set('bdd_nom',BDD_NOM_PRINCIPALE) ;
$this->registre->set('bdd_utilisateur',BDD_UTILISATEUR) ;
$this->registre->set('bdd_pass',BDD_MOT_DE_PASSE) ;
$this->gestionnaire_erreur = GestionnaireErreur::getInstance();
}
/**
* Charge un modele donné et le rend disponible sous la forme $this->nom_modele
* @param $nom_modele le nom du modèle à charger
*/
final protected function chargerModele($nom_modele) {
$chemin_modele = ($this->registre->get('base_chemin_modele')).$nom_modele.'.php';
if(!file_exists($chemin_modele)) {
return false ;
}
include_once($chemin_modele) ;
if(!class_exists($nom_modele)) {
return false ;
}
$this->$nom_modele = new $nom_modele ;
}
/**
* Fonction prenant en paramètre le nom d'un squelette et un tableau associatif de données, en extrait les variables, charge le squelette
* et cree une variable de classe contenant les deux combinés.
* @param String le nom du squelette
* @param Array un tableau associatif contenant les variables a injecter dans la vue
*
*/
final protected function chargerVue($nom_squelette,$donnees) {
$chemin_squelette = ($this->registre->get('base_chemin_squelette')).$nom_squelette.'.tpl.html';
if(!file_exists($chemin_squelette)) {
return false ;
}
$donnees['base_url'] = $this->registre->get('base_url_application') ;
// on extrait les variables du tableau de données
extract($donnees);
// et on enclenche la bufferisation de sortie
ob_start();
// si les tags courts sont désactivés
if ((bool) @ini_get('short_open_tag') === FALSE)
{
// on remplace les tags par la syntaxe classique avec echo
echo eval('?>'.preg_replace("/;*\s*\?>/", "; ?>", str_replace('<?=', '<?php echo ', file_get_contents($chemin_squelette))));
} else {
// sinon, on se contente d'inclure le squelette
include($chemin_squelette);
}
// on récupère le buffer et on le vide
$buffer = ob_get_contents();
@ob_end_clean();
// enfin on renvoie le contenu
$this->$nom_squelette = $buffer;
return $nom_squelette;
}
}
?>