Zugriff auf Shopware()->Modules()->Admin() gibt Fehler

Moin,
ich will von einem Rest Api Endpunkt (selber geschriebenes Plugin) auf Shopware()->Modules()->Admin() zugreifen. Leider erhalte ich dabei den Fehler:

{"success":false,"message":"Errormesage: You have requested a non-existent service \"shop\". Did you mean one of these: \"shopware_elastic_search.orm_backlog_subscriber\", \"shopware.plugin.config_reader\", \"shopware.plugin.cached_config_reader\", \"shopware.upload_max_size_validator\", \"shopware.generic_controller_listener\", \"shopware.escaper\"?"}

 Hier mein vereinfachter Quellcode:

class Shopware_Controllers_Api_Endpunkt extends Shopware_Controllers_Api_Rest
{   
    public function init()
    {
        Shopware()->Modules()->Admin();   
    }
}

Nun meine Fragen:

  1. ​Ist es möglich von einem Rest Api Endpunkt auf Shopware()->Modules()->Admin() zu zugreifen? Wenn ja, wie?
  2. Ich möchte mittels Shopware()->Modules()->Admin() Kunden-Logins durchführen. Ist die Klasse für die Kundenlogins gedacht oder gibt es andere Möglichkeiten?

 

Ich bin noch Einsteiger in der Plugin-Entwicklung und würde mich über eure Tipps und Hilfe freuen!

Das liegt daran, dass die API nicht weiß zu welchem Shop der Aufruf gehört. Das gleiche Problem gibt es z.B. auch bei der Commandline oder bei Backendplugins.

Unter anderem hier wird erklärt wie du den Shop selbst laden kannst: https://forum.shopware.com/discussion/39417/resource-shop-not-found-failure-in-console-plugin

1 „Gefällt mir“

Hallo t2oh4e,
vielen Dank für deine Antwort.

Du hattest recht. Ich musste erst den Shop zuweisen, danach konnte ich Shopware()->Modules()->Admin() benutzen.

Hier einmal die Lösung des Problems:

class Shopware_Controllers_Api_Endpunkt extends Shopware_Controllers_Api_Rest
{
    
    protected $admin;
    protected $shop;
    
    /**
     * Called on startup of this controller
     */
    public function init()
    {
        $repository = Shopware()->Models()->getRepository('Shopware\Models\Shop\Shop');
        $this->shop = $repository->getActiveDefault();
        $this->shop->registerResources(Shopware()->Bootstrap());
        $this->admin = Shopware()->Modules()->Admin();
    }
}

Ich kann nun die Klasse Admin verwenden und werde versuchen den Kunden-Login durchzuführen.
Vielen Dank nochmals!