Quelltext des aktuellen Standes
<?php
declare(strict_types=1);
/**
* Eigenständiger PSR-4-Autoloader für den Anwendungs-Namespace OpenNIT\.
*
* Hintergrund: Der Updater überschreibt `vendor/` bewusst NICHT
* (UpdateManager::PROTECTED_PATHS) und führt kein `composer dump-autoload`
* aus. Hinge das Laden der App-Klassen allein an Composers generierter
* PSR-4-Map, bliebe diese nach einem Update auf altem Stand stehen – eine
* Namespace-Umbenennung (früher ITDocs\, jetzt OpenNIT\) würde
* Bestandsinstanzen dann komplett lahmlegen, weil keine einzige App-Klasse
* mehr gefunden wird.
*
* Dieser Autoloader macht das Laden von OpenNIT\* daher unabhängig von
* `vendor/` und wird direkt aus jedem Einstiegspunkt (public/index.php,
* bin/*.php) – unmittelbar nach `vendor/autoload.php` – geladen. Composer
* bleibt für die Drittanbieter-Pakete zuständig.
*/
(static function (): void {
$srcDir = __DIR__ . '/src/';
// Primär: OpenNIT\Foo\Bar -> src/Foo/Bar.php
spl_autoload_register(static function (string $class) use ($srcDir): void {
$prefix = 'OpenNIT\\';
$len = strlen($prefix);
if (strncmp($class, $prefix, $len) !== 0) {
return;
}
$relative = substr($class, $len);
$file = $srcDir . str_replace('\\', '/', $relative) . '.php';
if (is_file($file)) {
require $file;
}
});
// Übergang / Defense-in-Depth: Frühere ITDocs\-Referenzen, die nach dem
// Rename noch irgendwo auftauchen könnten (z. B. in der DB gespeicherte
// FQCNs vor der Migration, externe Integrationen, serialisierte Daten),
// transparent auf den neuen OpenNIT\-Namespace umbiegen.
spl_autoload_register(static function (string $class): void {
$prefix = 'ITDocs\\';
$len = strlen($prefix);
if (strncmp($class, $prefix, $len) !== 0) {
return;
}
$target = 'OpenNIT\\' . substr($class, $len);
if (class_exists($target) || interface_exists($target) || trait_exists($target)) {
class_alias($target, $class);
}
});
})();