SMMP/build/viewer/core/Viewer.php

147 lines
2.8 KiB
PHP
Raw Permalink Normal View History

2016-07-11 15:44:18 +00:00
<?php
2016-10-18 14:03:03 +00:00
namespace viewer\core;
2016-07-11 15:44:18 +00:00
2016-10-18 17:09:47 +00:00
use \error\core\Error;
2017-01-30 17:39:21 +00:00
use \error\core\Err;
2016-07-11 15:44:18 +00:00
2016-10-18 14:03:03 +00:00
class Viewer{
2016-07-11 15:44:18 +00:00
2017-01-30 17:39:21 +00:00
public $error;
2016-07-11 15:44:18 +00:00
private $template;
private $args;
2016-07-11 15:44:18 +00:00
private $view;
public static $htmlError = "<span class='error'>Une erreur est survenue, veuilez contacter le webmaster si cette erreur persiste.</span>";
2016-07-11 15:44:18 +00:00
/* INITIALISATION DE LA VUE VUE
*
* @template<String> Nom du modèle de la vue à utiliser
* @args<Array> Données pour construire la vue à partir du modèle
2016-07-11 15:44:18 +00:00
*
*/
public function __construct($template, $args){
2017-01-30 17:39:21 +00:00
$this->error = new Error(Err::Success);
2016-07-11 15:44:18 +00:00
// Si pas parametre manquant, on quitte
if( $template == null ){
2017-01-30 17:39:21 +00:00
$this->error = new Error(Err::MissingPath);
2016-07-11 15:44:18 +00:00
return false;
}
/* [1] On vérifie que le template existe
=========================================================*/
$templatePath = $this->checkPath($template);
if( $templatePath === false )
return false;
/* [2] On récupère le chemin du template et on l'enregistre
=========================================================*/
$this->template = $templatePath;
/* [3] On enregistre les paramètres
=========================================================*/
$this->args = $args;
2016-07-11 15:44:18 +00:00
/* [4] On process la vue
=========================================================*/
$this->view = call_user_func(
$this->template,
$this->args
2016-07-11 15:44:18 +00:00
);
}
/* AFFICHE LA VUE CALCULEE
*
*/
public function view(){
echo $this->view;
}
/* RETOURNE LA VUE CALCULEE
*
*/
public function getView(){
return $this->view;
}
2016-07-11 15:44:18 +00:00
/* VERIFICATION DE L'EXISTENCE D'UN MODELE
*
* @template<String> Chemin du modèle
*
* @return status<Boolean> TRUE si le modèle existe, sinon FALSE
*
*/
private function checkPath($template){
/* [1] On vérifie le format
=========================================================*/
if( !preg_match('/^(\w+)\.(\w+)$/i', $template, $match) ){
2017-01-30 17:39:21 +00:00
$this->error = new Error(Err::ParamError);
2016-07-11 15:44:18 +00:00
return false;
}
/* [2] On vérifie que le template existe
=========================================================*/
$class = '\\viewer\\view\\'.$match[1].'\\'.$match[2];
$method = 'render';
2016-07-11 15:44:18 +00:00
/* (1) On vérifie que la classe existe */
if( !class_exists($class) ){
2017-01-30 17:39:21 +00:00
$this->error = new Error(Err::UnknownTemplate);
2016-07-11 15:44:18 +00:00
return false;
}
/* (2) On vérifie que la méthode existe */
if( !method_exists($class, $method) ){
2017-01-30 17:39:21 +00:00
$this->error = new Error(Err::UnknownTemplate);
2016-07-11 15:44:18 +00:00
return false;
}
/* [3] Si tout est bon, on renvoie les données
=========================================================*/
return [ $class, $method ];
}
}
// USE case
//
2016-10-18 14:03:03 +00:00
// $myView = new Viewer('templateParent.templateModel', [
2016-07-11 15:44:18 +00:00
// 'myVar' => 1,
// 'helloMsg' => 'Hello',
// ]);
//
// $myView->view();
//
?>