Nom du modèle de la vue à utiliser * @content Données pour construire la vue à partir du modèle * */ public function __construct($template, $content){ // Si pas parametre manquant, on quitte if( $template == null ){ $this->error = ManagerError::MissingPath; 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->content = $content; /* [4] On process la vue =========================================================*/ $this->view = call_user_func( $this->template, $this->content ); } /* AFFICHE LA VUE CALCULEE * */ public function view(){ echo $this->view; } /* VERIFICATION DE L'EXISTENCE D'UN MODELE * * @template Chemin du modèle * * @return status TRUE si le modèle existe, sinon FALSE * */ private function checkPath($template){ /* [1] On vérifie le format =========================================================*/ if( !preg_match('/^([a-z]+)\.([a-z]+)$/i', $template, $match) ){ $this->error = ManagerError::ParamError; return false; } /* [2] On vérifie que le template existe =========================================================*/ $class = '\\manager\\view\\'.$match[1]; $method = $match[2]; /* (1) On vérifie que la classe existe */ if( !class_exists($class) ){ $this->error = ManagerError::UnknownTemplate; return false; } /* (2) On vérifie que la méthode existe */ if( !method_exists($class, $method) ){ $this->error = ManagerError::UnknownTemplate; return false; } /* [3] Si tout est bon, on renvoie les données =========================================================*/ return [ $class, $method ]; } /* APPLIQUE UN REMPLACEMENT SIMPLE * * @template Contenu HTML du templace * @content Variables à insérer * * @return result Retourne le templace rempli * */ public static function replace($template, $content){ /* [1] On trie le tableau du plus long au plus court =========================================================*/ // usort($content, ['\manager\View', 'length_sort']); // $content = array_reverse($content); /* [2] On applique chaque remplacement =========================================================*/ foreach($content as $k=>$v){ /* Tant qu'il y a, on remplace */ if( strpos($template, '@'.$k) !== false ) $template = str_replace('@'.$k, $v, $template); } return $template; } private static function length_sort($A, $B){ $lenA = strlen($A); $lenB = strlen($B); if( $lenA == $lenB ) return strcmp($A, $B); return ($lenA < $lenB) ? -1 : 1; } } // USE case // // $myView = new View('templateParent.templateModel', [ // 'myVar' => 1, // 'helloMsg' => 'Hello', // ]); // // $myView->view(); // ?>