Skip to content
Extraits de code Groupes Projets
Valider c4440610 rédigé par vbochet's avatar vbochet
Parcourir les fichiers

Correction dans www/index.php ; Création d'un répertoire app/ qui contiendra...

Correction dans www/index.php ; Création d'un répertoire app/ qui contiendra les fichiers M, V et C et d'un répertoire app/kernel contenant les fichiers relatifs au noyau du programme ; Création d'un fichier Kernel.php dans app/kernel/, gérant les diverses requêtes (pour MVC)
parent 6b9430e7
Aucune branche associée trouvée
Aucune étiquette associée trouvée
2 requêtes de fusion!21Merge de Dev dans Master,!1Merge de dev-nestor sur dev
<?php
class Kernel { // création d'une classe PHP qui servira à la gestion des modèles, vues et contrôleurs, selon la requête fournie
public static function autoload($class) { // méthode qui charge automatiquement un fichier en fonction du nom de la classe passé en paramètre
if(file_exists(ROOT."/app/kernel/$class.php")) { // 1. on vérifie si le fichier voulu existe dans le répertoire contenant les fichiers de classe du noyau
require_once(ROOT."/app/kernel/$class.php"); // si c'est le cas, on l'inclut ici et on finit l'exécution de la fonction
}
else if(file_exists(ROOT."/app/controller/$class.php")) { // 2. sinon, on fait pareil dans le répertoire contenant les fichiers de contrôleurs
require_once(ROOT."/app/controller/$class.php"); // si c'est le cas, on l'inclut ici et on finit l'exécution de la fonction
}
else if(file_exists(ROOT."/app/model/$class.php")) { // 3. sinon, on fait pareil dans le répertoire contenant les fichiers de modèles
require_once(ROOT."/app/model/$class.php"); // si c'est le cas, on l'inclut ici et on finit l'exécution de la fonction
}
// si aucun fichier n'a été trouvé, on ne fait rien
}
public static function run() { // méthode, appelée pour toute requête de page, qui gère les différents fichiers à appeler
// 1. on commence par enregistrer notre autoload, afin que PHP sache quoi utiliser pour chercher les fichiers et classes dont on aura besoin plus tard
spl_autoload_register(array("Kernel", "autoload")); // on donne dans un tableau la classe qui contient la méthode d'autoload, et le nom de cette méthode (parce qu'on aurait pu lui donner un nom exotique, genre choucroute...)
// 2. on analyse la requete
$query = isset($_GET["query"]) ? $_GET["query"] : ""; // ternaire. Si la variable $_GET['query'] existe, alors on met sa valeur dans la varaible $query. Sinon, on y met la chaîne vide "".
$route = Router::analyze($query); // on récupère dans un tableau le nom du contrôleur à utiliser, l'action à déclencher dans ce contrôleur, et les paramètres qui restent dans la requête.
// Remarque : ici, on a fait appel à la méthode analyze() de la classe Router, pourtant on n'a pas dit à PHP où la trouver. C'est l'intérêt de l'autoload : à chaque fois que PHP tombe sur une classe qu'il n'a pas en mémoire, il va demander à l'autoload de lui indiquer où la trouver pour l'inclure. Et ça se fait automatiquement ! Elle est pas belle la vie ? :-)
// 3. on instancie (enfin) le contrôleur adéquat, et on execute l'action demandée
$class = $route["controller"]."Controller"; // variable contenant le nom de la classe qu'on va instancier. Il s'agit du nom du contrôleur donné par la méthode analyze() de Router, concaténé avec "Controller". C'est une contrainte qu'on se donne pour nommer les fichiers de façon uniforme.
if(class_exists($class)) { // on regarde si la classe en question a été définie (va normalement appeler autoload pour essayer de la charger le cas échéant), et si c'est le cas :
$controller = new $class($route); // on instancie la classe
$method = array($controller, $route["action"]); // on définit une variable method qui contient le contrôleur fraichement instancié et l'action à effectuer
if(is_callable($method)) { // si la méthode existe et peut être appelée
call_user_func($method); // alors on appelle la méthode du contrôleur avec l'action souhaitée
}
// il faudra gérer les erreurs : faire une méthode dédiée dans le noyau à appeler ?
// else { error_callable('method'); } ?
}
}
}
......@@ -10,8 +10,8 @@
// => pour le debug : echo $_GET["query"]; die(); (affiche le contenu de $_GET['query'] et termine l'exécution)
//
define("ROOT", realpath(__dir__."/..")); // on définit une sorte de variable globale, nommée ROOT, qui contient le répertoire racine de notre site. On s'en servira par la suite lorsque l'on voudra accéder à tel ou tel fichier (vue, controlleur, modèle ou autre...
define("ROOT", realpath(__dir__."/..")); // on définit une sorte de variable globale, nommée ROOT, qui contient le répertoire racine de notre site. On s'en servira par la suite lorsque l'on voudra accéder à tel ou tel fichier (vue, contrôleur, modèle ou autre...
require_once(ROOT . "/app/kernel/Kernel.php"); // première chose à faire : on inclut le fichier noyau, qui va gérer les différentes actions à effectuer (trouver quelle page est demandée, quel controlleur appeler, quelle vue afficher, etc.)
require_once(ROOT . "/app/kernel/Kernel.php"); // première chose à faire : on inclut le fichier noyau, qui va gérer les différentes actions à effectuer (trouver quelle page est demandée, quel contrôleur appeler, quelle vue afficher, etc.)
Kernel::run(); // deuxième chose : on lance la méthode run() de la classe Kernel. (oui, c'est de l'objet.)
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter