Hallo! Ich möchte in meinem Plugin gerne einen eigenen Service nutzen. In der Ordnerstruktur hatte ich diesen bisher direkt im Plugin-Ordner auf einer Ebene mit der Bootstrap.php: MyPlugin --| Bootstrap.php --| MyService.php
In der Bootstrap habe ich use MyPlugins\MyPlugin, in der Service Klasse analog namespace MyPlugins\MyPlugin und in der afterInit() den Service-Namespace wie folgt registriert: $loader = $this-\>get('loader'); $loader-\>registerNamespace( 'MyPlugins\\MyPlugin', $this-\>Path() );
Eine Instanz des Service konnte ich in der Bootstrap wie folgt erstellen: $testService = new MyPlugin\MyService();
Nun möchte ich die Ordnerstruktur ändern: MyPlugin --| Components --| --| MyService.php --| Bootstrap.php
Inwiefern muss ich die Namespaces oder sonstiges ändern? Wenn ich die Datei verschiebe, erhalte ich in meiner Entwicklungsumgebung keine Fehler, doch beim Ausführen im Shop einen Fatal Error, dass die Klasse nicht gefunden wird. Brauch ich als Namespace nun MyPlugins\MyPlugin\Components?
[quote=“DenKon26”]Brauch ich als Namespace nun MyPlugins\MyPlugin\Components?[/quote] Es sollte reichen das Du bei registerNamespace den Wert $this->Path() zu $this->Path().’/Components’ Achtung ist nicht getestet Gruß
In der Bootstrap z.B. public function afterInit() { $this-\>get('Loader')-\>registerNamespace( 'ShopwarePlugins\PrefixPluginname', $this-\>Path() ); }
In deinem Plugin im Ordner „Components“ die Beispielklasse Foo.php namespace ShopwarePlugins\PrefixPluginname\Components; class Foo { }
Dann kannst Du per use use ShopwarePlugins\PrefixPluginname\Components\Foo;
und $foo = new Foo();
deine Klasse benutzen. Schöne Grüße, Niklas