Registrierung der Models

Hallo Shopware-Community,

ich habe eine Frage bezüglich Models. Muss man bei dem neuen Plugin-System seit 5.2 die eigenen Models registrieren?

Gruß Denis

 

Moin Moin,

 

das würde mich auch interessieren. Sobald ich $this->registerCustomModels() aufrufe, lässt sich das Plugin nicht mehr installieren. Das Model ist die exakte Kopie aus https://github.com/shopware/devdocs/tree/master/exampleplugins/legacy/Backend/SwagProductDetail. Mir ist klar, dass es sich dabei um “legacy” Beispiele handelt, jedoch steht nirgendwo wie es unter Shopware 5.2 und dem neuen Plugin-System funktioniert.

 

 'registerBackendController',
            'Enlight_Controller_Action_PostDispatchSecure_Backend_Article' => 'extendArticleDetails',
            'Enlight_Controller_Action_PostDispatchSecure_Backend_Customer' => 'extendCustomerDetails',
        ];
    }

    public function install(InstallContext $context)
    {
        $this->registerArticleAttributes($context);
        $this->registerCustomerAttributes($context);

        $this->updateSchema();
    }


    protected function updateSchema() {
        $this->registerCustomModels();

        $em = $this->Application()->Models();
        #$em = Shopware()->Models();
        $tool = new \Doctrine\ORM\Tools\SchemaTool($em);

        $classes = array(
            $em->getClassMetadata('Shopware\CustomModels\Social\Social')
        );

        try {
            $tool->dropSchema($classes);
        } catch (Exception $e) {
            //ignore
        }
        $tool->createSchema($classes);

        $this->addDemoData();
    }

    ....

}

 

Die Pluginstruktur ist wie folgt:

SsBasicConfiguration
  +Controllers
    +Backend
      SsBasicConfiguration.php
  +Models
    +Social
      Social.php
+Resources
  menu.xml
  +views
    +backend
      …
SsBasicConfiguration.php

Über Infos seitens Shopware oder erfahrener Programmierer wäre ich dankbar. Besten Dank und Gruß

 

Mein Problem hat sich mit folgendem Code erledigt:

 

protected function updateSchema() {
        $em = $this->container->get('models');
        $schemaTool = new SchemaTool($em);
        $schemaTool->updateSchema(
            [$em->getClassMetadata(\SsBasicConfiguration\Models\Social\Social::class)],
            true
        );
    }

 

Hi,

das obige Snippet ist prinzipiell erstmal nicht falsch - aber dient dazu, Tabellen auf Basis eines Models zu erzeugen. Das hat mit der bloßen Registrierung erstmal wenig zu tun. Die Registrierung ist mit dem neuen Plugin-System vollautomatisch: Ihr müsste da gar nichts mehr aufrufen - nur die Models in den Namespace des Plugins ablegen. Also beispielsweise nach SwagMyPlugin\Models\Social\Social. 

Gegebenenfalls müsst ihr danach einmal den Cache leeren (Proxy-Caches), damit das greift. Aber ansonsten ist da kein manuelles Vorgehen erforderlich.

Daniel

1 „Gefällt mir“

Vielen Dank für die Info. Ich hab da noch eine Frage zu den CRUD Methoden aus dem Backend. Wenn ich einen Eintrag in meinem Grid hinzufüge oder einen bestehenden im Detailwindow (beides eigene Komponenten, von Shopware.grid… etc abgeleitet) verändere, werden ja Requests an den Backendcontroller gesendet. In eurem Beispiel „SwagProduct“ ist eurer Backendcontroller bis auf $alias und $model leer, dennoch funktionieren da die CRUD Operationen. Bei mir hingegen nicht. Muss ich doch die Methoden implementieren? Wenn ja, dann schlägt bei mir $xyz->fromArray($data); immer fehl? Hab ich irgendwas nicht beachtet?

Danke und beste Grüße