/
autoload.php
93 lines (74 loc) · 2.54 KB
/
autoload.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
$classes = collect([]);
function getClassesInDirectory(&$classes, $path)
{
return collect(scandir($path))->filter(function ($string) {
return substr($string, 0, 1) != '.';
})->each(function ($classFile) use ($classes, $path) {
$file = $path . DIRECTORY_SEPARATOR . $classFile;
if (is_dir($file)) {
//Get classes from subdirs
getClassesInDirectory($classes, $file);
}
//If php file, add to classes collection
if (preg_match('/\.php$/', $classFile, $matches)) {
$class = collect();
$class->file = $file;
$type = explode(DIRECTORY_SEPARATOR, $path);
$class->dir = array_pop($type);
$class->class = str_replace('.php', '', $classFile);
$classes->push($class);
}
});
}
function getNameSpaces(\Illuminate\Support\Collection $classFiles)
{
$classFiles = $classFiles->map(function (\Illuminate\Support\Collection $classFile) {
$contents = file_get_contents($classFile->file);
if (preg_match('/namespace (.+)?;/i', $contents, $matches)) {
$classFile->namespace = $matches[1] . '\\' . $classFile->class;
} else {
//Abort execution when class wasn't loaded correctly
// \esc\Classes\Log::logAddLine('autoload', "Class without namespace found: $classFile->file");
var_dump("Class without namespace found: $classFile->file");
}
return $classFile;
});
return $classFiles;
}
function buildClassMap()
{
global $classes;
$dirs = ['Interfaces', 'Classes', 'Controllers', 'Models', 'Modules', '..' . DIRECTORY_SEPARATOR . 'Migrations'];
foreach ($dirs as $dir) {
getClassesInDirectory($classes, __DIR__ . DIRECTORY_SEPARATOR . $dir);
}
$classes = getNameSpaces($classes);
}
/**
* @param $className
*
* @throws Exception
*/
function esc_class_loader($className)
{
global $classes;
$class = $classes->where('namespace', $className)->first();
if ($class) {
if (file_exists($class->file)) {
require_once $class->file;
} else {
die("Trying to load non-existant file: " . $class->file);
}
} else {
// \esc\Classes\Log::logAddLine('class_loader', 'Class not found: ' . $className, isVeryVerbose());
var_dump('Class not found: ' . $className);
}
}
function classes(): \Illuminate\Support\Collection
{
global $classes;
return $classes;
}
buildClassMap();
spl_autoload_register('esc_class_loader');