Hallo, für ein neues Modul möchte ich gerne den integrierten Autoloader benutzen und dort weitere Pfade für meine Bibliotheken registrieren. Dieser ist jedoch mit einem Hash-Suffix versehen wobei ich befürchte, daß sich dieser Suffix bei einem Update ändern könnte: ComposerAutoloaderInitf2bc4cc1ac413c84e7744ab9023b8595::getLoader();
Gibt es einen eleganteren resp. sichereren Weg, um an die Autoloader-Instanz zu kommen (oder mache ich mir unnötig Sorgen ? ) ?
Hi, das kannst du in deiner Bootstrap recht einfach machen: $this-\>Application()-\>Loader()-\>registerNamespace( 'Shopware\\MyPlugin', $this-\>Path() );
Damit wird in diesem Beispiel der Namespace \Shopware\MyPlugin in deinem Plugin-Verzeichnis registriert. Hast du nun in deinem Plugin “MyPlugin” die Verzeichnisstruktur “MyPlugin\Components\Test.php”, könntest du die darin enthaltene Klasse “Test” über den Namespace Shopware\MyPlugin\Components\Test ansprechen. Die Registrierung ist je nur für einen Request, die musst du also an geeigneter Stelle durchführen. lG Daniel
Hi Daniel, danke für die schnelle Antwort - ich hab es nun auch geschafft meine lib mit dem Enlight Loader einzubinden - hier meine Stolpersteine, falls jemand anderes ähnliche Probleme hat: der übergebene path-Parameter bei registerNamespace benötigt ein trailing Slash und meine Lib hat ein Unterverzeichnis mit einem Underscore, was durch den Autoloader als Directory-Separator interpretiert wird. Glücklicherweise kann der registerNamespace als 3. Parameter ein String mit gültigen Separators übergeben werden, wodurch das ungewollte Verhalten unterbunden werden kann. Beispiel: $this-\>Application()-\>Loader()-\>registerNamespace('ExternalLib', \_\_DIR\_\_ . '/Pfad/zur/Lib/', '\\');