sw52 Namespace in der neuen Pluginstruktur

Es geht um den Namespace in der sw52 Pluginstruktur.

Wir haben eine Core-Trait den wir in unseren Plugins per Trait-use nutzen möchten. Liegt der Trait in der alten Struktur unter Shopware\Plugins\Local\ funktioniert das so:

# custom/plugins/ExamplePlugin/ExamplePlugin.php
namespace ExamplePlugin;

use Shopware\Plugins\Local\NfCore\NfPluginCore;

class ExamplePlugin extends Plugin
{
    use NfPluginCore;
		...
}


#Shopware\Plugins\Local\NfCore\NfPluginCore.php
namespace Shopware\Plugins\Local\NfCore;

trait NfPluginCore
{...}

Nun hätte ich den Trait aber auch gerne unter \custom\plugins\ , dort bekomme ich es aber nicht zu laufen. Hat jemand eine Idee wie dort der Namespace lauten muss?

Die Plugins aus dem neuen Pluginsystem werden viel früher bereits im Kernel gebootet. Dort sind die “alten” Plugins noch nicht initalisiert worden. Ich würde an deiner Stelle das Plugin einfach in das neue Pluginsystem migrieren…

Bei meinem Beispiel liegt das ExamplePlugin ja unter custom/plugins/ExamplePlugin/ExamplePlugin.php und nutze einen Trait in der alten Struktur, da dieses funktioniert. Jetzt möchte ich diesen Trait von engine/Shopware/Plugins/Local/NfCore/NfPluginCore.php verschieben nach custom/plugins/NfCore/NfPluginCore.php und in custom/plugins/ExamplePlugin/ExamplePlugin.php nutzen.

Also wie muss der Namespace lauten? Gibt es keinen Namespace für die Plugins an der neuen Stellen? Leider habe ich keinen Plan wie ich das mit den Namespaces debuggen kann :frowning:

Hast du denn den namespace registriert für den autoloader Oder hast du da einfach die Datei in den Ordner gepackt?

viele Grüße 

Der Namespace müsste NfCore/NfPluginCore sein. Der PluginOrdner wird immer als Namespace erstellt siehe shopware/PluginInitializer.php at 5fc10f63095a475e980c29db4ac476a271c6d5cd · shopware/shopware · GitHub

Ja das ist korrekt, jedoch will ich ja von ExamplePlugin/ExamplePlugin auf NfCore/NfPluginCore zugreifen. Und anscheinend ist zu diesem Zeitpunkt der Namespace NfCore/ noch nicht da. So das use Shopware\Plugins\Local\NfCore\NfPluginCore funktioniert, NfCore\NfPluginCore jedoch nicht.

Sehr komisches verhalten, lasse ich mir in vendor/symfony/class-loader/Psr4ClassLoader.php:44 die prefixe ausgeben. So bekomme ich bei use Shopware\Plugins\Local\NfCore\NfPluginCore; die 3 installierten Plugins unter /custom/plugins/. Mache ich use NfCore\NfPluginCore enthält prefixes nur das ExamplePlugin was ich über die console mit console sw:plugin:reinstall ExamplePlugin aufrufe. Nicht wirklich nachvollziehbar.