Hallo, wir versuchen gerade eine eigene Component Klasse in unserem Plugin zu verwenden. In unserem Backend-Controller (PHP) wollen wir eine Klassenfunktion aufrufen. Jedoch bekommen wir folgende Fehlermeldung zurück: Fatal error: Class 'Shopware\_Components\_MyDocument' not found in .../engine/Shopware/Plugins/Local/Backend/UnserPlugin/Controllers/Backend/MyDocument.php 503 Service Unavailable
Kann uns jemand dazu einen Tipp geben? Verzeichnisstruktur: UnserPlugin\Components\MyDocument.php UnserPlugin\Controllers\Backend\MyDocument.php UnserPlugin\Bootstrap.php Listings: // UnserPlugin\Controller\MyDocument.php class Shopware\_Controllers\_Backend\_MyDocument extends Shopware\_Controllers\_Backend\_ExtJs { public function createDocumentAction() { // ... $this-\>createDocument(); // ... } private function createDocument() { // ... $myDocument = Shopware\_Components\_MyDocument::initDocument(/\* ... \*/); // ... } }
// UnserPlugin\Components\MyDocument.php class Shopware\_Components\_MyDocument extends Enlight\_Class implements Enlight\_Hook { public static function initDocument(/\* ... \*/) { return Enlight\_Class::Instance('Shopware\_Components\_MyDocument'); } }
// UnserPlugin\Bootstrap.php private function registerComponents() { $this-\>subscribeEvent( 'Enlight\_Bootstrap\_InitResource\_MyDocument', 'onInitMyDocument' ); } // ... public function onInitMyDocument(Enlight\_Event\_EventArgs $args) { $this-\>Application()-\>Loader()-\>registerNamespace( 'MyComponents', $this-\>Path() . 'Components/' ); $myDocument = new Shopware\_Components\_MyDocument(); return $myDocument; }
Warum versuchst du über ein Singleton eine Instanz zu erzeugen?! Deine Komponente wird nur über dein Event geladen, wenn du folgendermaßen drauf zugreifst: Shopware()->MyDocument()->machIrgendwas(); Übrigens: der Name deiner Methode stimmt nicht mit dem Namen im subscribe überein. Viele Grüße
Vielen Dank für die schnelle Antwort. Ich verstehe das System dahinter noch nicht so ganz. Also wie Shopware dann über Showware()-\>MyDocument()-\>...()
zugreift. (Wird mir auch von PhpStorm nicht automatisch vervollständigt.) Jetzt bekomme ich die Fehlermeldung: Fatal error: Class 'Shopware\_Components\_MyDocument' not found in .../engine/Shopware/Plugins/Local/Backend/UnserPlugin/Bootstrap.php 503 Service Unavailable
Allgemein: Wie kann ich zu einem Plugin eine Component-Klasse hinzufügen bzw. diese registrieren lassen und dann z.B. in einem Backend-Controller verwenden? Das ist mir bis jetzt schleierhaft…
Hier ein vollständiges Beispiel bei dem auch der Umgang mit eigenen Komponenten erläutert wird: http://wiki.shopware.com/Plugin-Entwick … #Bootstrap Gesendet von meinem iPhone mit Tapatalk