Die Liste der Units aus der Tabelle "s_core_units" über REST API auslesen?

Hallo zusammen,

ich habe keine API-Resource gefunden, über die man die Liste von Units (Liter, Gramm, Stück, Paket… usw) auslesen kann. Mann kann im Backend eine “Ressource” und “Privileg” erstellen und dem User zuweisen (erlauben), aber wie erstellt man entsprechende Controller, Components usw.? Gibt es ein Tutorial, das so was beschreibt?

Das hier sollte die helfen: http://community.shopware.com/Shopware-4-API-erweitern_detail_991_869.html

Hab es mir jetzt nicht im Detail angesehen, aber das müsste auch in SW5 noch so funktionieren.

1 Like

Und auch hier:

https://developers.shopware.com/developers-guide/

1 Like

Vielen Dank, das Tutorial „Shopware 4 API erweitern“ hatte ich auch schon gefunden und versucht umzusetzen, aber wusste nicht genau in welches Verzeichnis das API-Plugin unter SW5 muss.

Es gibt in SW5 unter /engine/Shopware/Plugins/Local/ drei Unterverzeichnisse - Backend, Core und Frontend.  Der Logik entsprechend (/engine/Shopware/Controllers/) habe ich das Plugin in einem Verzeichnis /engine/Shopware/Plugins/Local/Api/ erstellt und nichts hat funktioniert. Ich bin dann davon ausgegangen, dass unter SW5 das Ganze anders konfiguriert wird aber nichs weiteres dazu gefunden.

Jetzt habe ich ich das Plugin nach /engine/Shopware/Plugins/Local/Backend/ verschoben und konnte schon mal installieren, aktivieren und aufrufen.

Alles aus dem Beispiel mit „User“ und „Users“ durch „Unit“ und „Units“ ersetzt und überall in der Unit-Resource

_\Shopware\Models\User\__User_

durch

_\Shopware\Models\Article\__Unit_

ersetzt. Das Auslesen der Units-Liste per GET funktioniert!

 

Beim Versuch eine Unit mit POST zu erstellen, wird allerdings eine Exception geworfen: in der Methode Unit::create() die Zeile:

_$params = $this-\>prepareUnitData($params);_

Die prepareUnitData() habe ich analog zu prepareUserData() übernommen. Nach Prüfung habe ich aber festgestellt, das auch die prepareUserData(), aufgerufen in User.php, nirgendwo definiert ist.

Kommt die Methode prepareUserData() aus SW4 und wurde in SW5 entfernt? Oder ist es eine „magische“ Methode, warum funktioniert das dann für prepareUnitData() nicht?

Wie soll das Array $params für das Übergeben an $unit->fromArray() aussehen?

Hat jemand eine Idee?

Der POST-Request sieht dann so aus:

 $client-\>call('units', ApiClient::METHODE\_POST, [array](http://www.php.net/array)( 'unit' =\> 'qm', 'description' =\> 'Quadratmeter', ));

Ok, jetzt habe ich’s:

in der Unit.php unter /engine/Shopware/Plugins/Local/Backend/SwagExtendApi/Components/Api/Resource/ muss man die Methode erstellen:

_/\*\*_ _\*_ _@param_ _array $params_ _\*_ _@return_ _mixed_ _\*_ _@throws_ _ApiException\ParameterMissingException_ _\*/_ **private function** prepareUnitData($params){ **if** (! **isset** ($params['unit']) || **empty** ($params['unit'])) { **throw new** ApiException\ParameterMissingException(); } **if** (! **isset** ($params['description']) || **empty** ($params['description'])) { **throw new** ApiException\ParameterMissingException(); } $params['unit'] = $params['unit']; $params['name'] = $params['description']; **return** $params; }

 

Dann klappt es auch mit dem POST-Request!

 

ich stehe gerade vor dem gleichen Problem, wäre es evetuell möglich die Anpassungen dafür von dir zu bekommen?

 

Grüße

Stephan