65 lines
3.5 KiB
PHP
65 lines
3.5 KiB
PHP
<?php
|
|
|
|
spl_autoload_register(function ($className) {
|
|
// Définir les mappings des namespaces vers leurs répertoires de base
|
|
$namespaceMap = [
|
|
'Portfolio\\Configure\\Routing\\' => __DIR__ . '/../routing/',
|
|
'Portfolio\\Configure\\Database\\' => __DIR__ . '/../database/',
|
|
|
|
'Portfolio\\Source\\Design\\Controller\\Home\\' => __DIR__ . '/../../source/design/controller/home/',
|
|
'Portfolio\\Source\\Design\\Controller\\Home\\Read\\' => __DIR__ . '/../../source/design/controller/home/read',
|
|
|
|
'Portfolio\\Source\\Design\\Controller\\About\\' => __DIR__ . '/../../source/design/controller/about/',
|
|
'Portfolio\\Source\\Design\\Controller\\About\\Read\\' => __DIR__ . '/../../source/design/controller/about/read',
|
|
|
|
'Portfolio\\Source\\Design\\Controller\\Project\\' => __DIR__ . '/../../source/design/controller/project/',
|
|
'Portfolio\\Source\\Design\\Controller\\Project\\Read\\' => __DIR__ . '/../../source/design/controller/project/read',
|
|
|
|
'Portfolio\\Source\\Design\\Controller\\Experience\\' => __DIR__ . '/../../source/design/controller/experience/',
|
|
'Portfolio\\Source\\Design\\Controller\\Experience\\Read\\' => __DIR__ . '/../../source/design/controller/experience/read',
|
|
|
|
'Portfolio\\Source\\Design\\Controller\\Tech\\' => __DIR__ . '/../../source/design/controller/tech/',
|
|
'Portfolio\\Source\\Design\\Controller\\Tech\\Read\\' => __DIR__ . '/../../source/design/controller/tech/read',
|
|
|
|
'Portfolio\\Source\\Design\\Controller\\Contact\\' => __DIR__ . '/../../source/design/controller/contact/',
|
|
'Portfolio\\Source\\Design\\Controller\\Contact\\Read\\' => __DIR__ . '/../../source/design/controller/contact/read',
|
|
|
|
|
|
|
|
'Portfolio\\Source\\Design\\Controller\\Test\\' => __DIR__ . '/../../source/design/controller/test/',
|
|
'Portfolio\\Source\\Design\\Controller\\Test\\Create\\' => __DIR__ . '/../../source/design/controller/test/create',
|
|
'Portfolio\\Source\\Design\\Controller\\Test\\Read\\' => __DIR__ . '/../../source/design/controller/test/read',
|
|
|
|
|
|
|
|
'Portfolio\\Source\\Design\\Controller\\' => __DIR__ . '/../../source/design/controller/',
|
|
];
|
|
|
|
// Parcourir les namespaces définis pour trouver une correspondance
|
|
foreach ($namespaceMap as $namespacePrefix => $baseDir) {
|
|
// Vérifier si la classe utilise le préfixe du namespace
|
|
if (strpos($className, $namespacePrefix) !== 0) {
|
|
continue; // Passer à la prochaine itération si aucun préfixe de namespace ne correspond
|
|
}
|
|
|
|
// Retirer le préfixe du namespace pour obtenir le chemin relatif de la classe
|
|
$relativeClass = substr($className, strlen($namespacePrefix));
|
|
|
|
// Convertir le chemin relatif en chemin de fichier
|
|
$file = $baseDir . str_replace('\\', DIRECTORY_SEPARATOR, $relativeClass) . '.php';
|
|
|
|
// Vérifier si le fichier existe et l'inclure
|
|
if (file_exists($file)) {
|
|
require_once $file;
|
|
return; // Sortir de la fonction dès que la classe est chargée
|
|
}
|
|
|
|
// Si le fichier n'existe pas, lever une exception immédiatement
|
|
error_log("Autoloader: Impossible de charger la classe '$className' - Fichier non trouvé : $file");
|
|
throw new Exception("Autoloader: Fichier introuvable pour la classe '$className'.");
|
|
}
|
|
|
|
// Si aucun namespace ne correspond, lever une exception
|
|
error_log("Autoloader: Aucun mapping trouvé pour la classe '$className'.");
|
|
throw new Exception("Autoloader: Aucun mapping de namespace trouvé pour la classe '$className'.");
|
|
}); |