Problem mit CLI generiertem Plugin

Hallo,

Ich habe für die Erstellung eines neuen Backend-Plugins das CLI-Tool eingesetzt. Das hat mit dem Befehl

sw plugin:create --namespace=Backend --backendModel=ZweTestModel --haveBackend --haveModels ZweTest

soweit auch alles geklappt und ich konnte das Plugin installieren und aktivieren. Die entsprechende Tabelle in der Datenbank wurde auch angelegt. Jedoch erhalte ich dann eine Fehlermeldung, wenn ich das Plugin aufrufe… 

Ups! Ein Fehler ist aufgetreten!
Die nachfolgenden Hinweise sollten Ihnen weiterhelfen.

Class 'ZweTestModel' does not exist in vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php on line 96

#0 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php(41): Doctrine\Common\Persistence\Mapping\MappingException::nonExistingClass('ZweTestModel')
#1 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(281): Doctrine\Common\Persistence\Mapping\RuntimeReflectionService->getParentClasses('ZweTestModel')
#2 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(311): Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getParentClasses('ZweTestModel')
#3 vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php(78): Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata('ZweTestModel')
#4 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(216): Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata('ZweTestModel')
#5 vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(281): Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor('ZweTestModel')
#6 Shopware/Controllers/Backend/Application.php(1119): Doctrine\ORM\EntityManager->getClassMetadata('ZweTestModel')
#7 Shopware/Controllers/Backend/Application.php(1006): Shopware_Controllers_Backend_Application->getModelFields('ZweTestModel', 'zwe_test_model')
#8 Shopware/Controllers/Backend/Application.php(365): Shopware_Controllers_Backend_Application->getFilterConditions(Array, 'ZweTestModel', 'zwe_test_model', Array)
#9 Shopware/Controllers/Backend/Application.php(219): Shopware_Controllers_Backend_Application->getList('0', '20', Array, Array, Array)
#10 Enlight/Controller/Action.php(158): Shopware_Controllers_Backend_Application->listAction()
#11 Enlight/Controller/Dispatcher/Default.php(523): Enlight_Controller_Action->dispatch('listAction')
#12 Enlight/Controller/Front.php(226): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#13 Shopware/Kernel.php(153): Enlight_Controller_Front->dispatch()
#14 vendor/symfony/http-kernel/HttpCache/HttpCache.php(492): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#15 Shopware/Components/HttpCache/AppCache.php(255): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#16 vendor/symfony/http-kernel/HttpCache/HttpCache.php(263): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#17 Shopware/Components/HttpCache/AppCache.php(103): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true)
#18 shopware.php(101): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#19 {main}

Kann mir da jemand helfen und einen Tipp geben, wo das Problem liegen könnte und was ich anpassen muss, damit das funktioniert? Leider ist die Dokumentation zum CLI-Tool mir da keine große Hilfe gewesen…

Danke.

Hat niemand eine Idee wo der Fehler liegen könnte?

Ich denke und hoffe Du hast das Problem inzwischen selbst beheben können oder auf eine andere Art und Weise einen Weg zum Ziel gefunden.

Ich bin heute selbst auf das Problem gestoßen und habe nach etwas Spielerei und Source Code lesen die Antwort gefunden. 

In einem Backend Controller muss die $model Property nicht nur der Name des Models sein, sondern den gesamten Pfad enthalten. 

If this property isn’t set, the whole backend application don’t works. To configure this property you have only to set the whole model class name into this parameter.

Hier der Kommentauszug aus der Shopware_Controllers_Backend_Application class. 

Wenn man also mit dem CLI ein Plugin “MyDemoPlugin” mit Backend (–haveBackend) erzeugt und eine Model "FooModel" dafür erstellt muss in der Property nicht nur “FooModel” stehen sondern “MyDemoPlugin\Models\FooModel”. 

Das ist schon die Lösung. Zumindest hat es für mich damit funktioniert.

Hallo zusammen,

bei der Erstellung wird gefragt “Please specify the main model for your backend application:” Als Vorschlag erhaltet ihr dabei “MyDemoPlugin\Models\DemoPlugin”

Heißt also, ihr solltet dort auch den kompletten Pfad zum Model angeben. 

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 Like

@Michael Telgmann schrieb:

Hallo zusammen,

bei der Erstellung wird gefragt “Please specify the main model for your backend application:” Als Vorschlag erhaltet ihr dabei “MyDemoPlugin\Models\DemoPlugin”

Heißt also, ihr solltet dort auch den kompletten Pfad zum Model angeben. 

Viele Grüße aus Schöppingen

cool Michael Telgmann

Ja wenn man sich so langsam in die Shopware-Welt einliest und denkt dann wird einem das klar. :slight_smile: Vielleicht könnte man aber trotzdem den Hilfetext an der Stelle noch ein wenig verfeinern.

Vielen Dank.