-
Notifications
You must be signed in to change notification settings - Fork 0
/
autoload.php
71 lines (61 loc) · 1.7 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
<?php
namespace Inetris\Nocode;
use Bitrix\Main\Loader;
use Bitrix\Main\LoaderException;
class Autoload
{
/**
* @throws LoaderException
*/
public function __construct()
{
Loader::registerAutoLoadClasses(
$this->getModuleId(),
$this->getModuleClasses()
);
}
/**
* @return string
*/
public function getModuleId(): string
{
return basename(__DIR__);
}
/**
* @return string
*/
public function getModuleNamespace(): string
{
$moduleId = $this->getModuleId();
$names = explode(".", $moduleId);
$namespace = "";
foreach ($names as $name) {
$namespace .= "\\".ucfirst($name);
}
return $namespace;
}
/**
* @param string $path
* @return array
*/
public function getModuleClasses(string $path = "lib"): array
{
$includedNamespaces = str_replace(["lib", "/"], ["", "\\"], $path);
$libPath = $path."/";
$libFiles = scandir(__DIR__."/".$libPath);
$namespace = $this->getModuleNamespace();
$moduleClasses = [];
foreach ($libFiles as $libName) {
if (substr($libName, 0, 1) == '.') continue;
if (substr($libName, -4) != ".php") {
$nextLevelModuleClasses = $this->getModuleClasses($path.'/'.$libName);
$moduleClasses = array_merge($moduleClasses, $nextLevelModuleClasses);
} else {
$class = $namespace.$includedNamespaces."\\".substr($libName, 0, -4);
$moduleClasses[$class] = $libPath.$libName;
}
}
return $moduleClasses;
}
}
$autoload = new Autoload();