Plugin eingene Components einbinden

hi, ich kann in einem Plugin ja eigene klassen als Components einbinden: public function install() { $this-\>subscribeEvent( 'Enlight\_Bootstrap\_InitResource\_Mycomponent', 'onInitMyComponent' ); } public function onInitMyComponent(Enlight\_Event\_EventArgs $args) { $this-\>Application()-\>Loader()-\>registerNamespace( 'Shopware\_Components', $this-\>Path() . 'Components/' ); $component = new Shopware\_Components\_Mycomponent(); return $component; } Das funktioniert mit einer Klasse auch wunderbar. Wie kann ich aber eine ganze Library die ich im Components-Ordner habe einbinden? Ich habe versucht einen eigenen auto-loader einzubinden: public function init() { spl\_autoload\_register(array($this,'\_\_loader')); } private function \_\_loader ($className) { $className = str\_replace('\\','/',$className); require\_once(\_\_DIR\_\_ . '/Components/' . $className . '.php'); } Das funktioniert soweit auch. aber an manchen stellen bekomme ich dann einen Fehler dass Dateien im Components-Verzeichnis nciht gefunden werden können. Sind ja auch nicht da: [quote] Fatal error: require_once() [function.require]: Failed opening required ‚/shopware42/engine/Shopware/Plugins/Community/Frontend/MyPlugin/Components/shopware/models/media/c2fml.php‘ (include_path=’/shopware42/engine/Library/:/shopware42/templates/’) in /shopware42/engine/Shopware/Plugins/Community/Frontend/MyPlugin/Bootstrap.php on line 44 [/quote] Wie wäre hier das generelle Vorgehen wenn man eigene PHP-Libraries einbinden möchte? Vielen Dank

Niemand? Macht das keiner? Gesendet von meinem iPhone mit Tapatalk

Eventuell helfen dir die beiden Links weiter: programmierung-f56/shopware-4-2-weitere-pfade-im-autoloader-registrieren-t19406.html http://www.thomas-eiling.de/verwendung- … lugins/302 Gruß

[quote=“tonne”]Eventuell helfen dir die beiden Links weiter: programmierung-f56/shopware-4-2-weitere-pfade-im-autoloader-registrieren-t19406.html http://www.thomas-eiling.de/verwendung- … lugins/302 Gruß[/quote] hi, danke diese beiden Links hatte ich schon gefunden. Der erste hilft mir nicht weiter. Das klappt bei mir gar nnicht: $this-\>Application()-\>Loader()-\>registerNamespace('MyLibrary', \_\_DIR\_\_ . '/Components/MyLibrary/API/', '\\'); $client = new MyLibrary\Client($this-\>\_user, $this-\>\_token); [quote]Fatal error: Class ‘MyLibrary\API\Client’ not found[/quote] Die Methode von Thomas Eiling habe ich ja im Prinzip so umgesetzt. Leider sucht er dann auch andere Klassen in meinem Components-Verzeichnis. Zumindest wenn der Cache gellert ist und mein Controller direkt aufgerufen wird.

[quote=„hbee“]Die Methode von Thomas Eiling habe ich ja im Prinzip so umgesetzt. Leider sucht er dann auch andere Klassen in meinem Components-Verzeichnis. Zumindest wenn der Cache gellert ist und mein Controller direkt aufgerufen wird.[/quote] Mach doch um das require_once noch ein file_exists. So in etwa: $className = str\_replace('\\','/',$className); $fileName = \_\_DIR\_\_ . '/Components/' . $className . '.php'; if(file\_exists($fileName)){ require\_once($fileName); } Dann sollte es doch funktionieren oder? Gruß

1 Like

[quote] Mach doch um das require_once noch ein file_exists. [/quote] ja, auch eine Idee. Vielen Dank.