Verwendung von GuzzleHttp

Ich möchte in meinem Plugin gern Guzzle verwenden, habe gesehen, dass es auch im shopware/vendor-Verzeichnis liegt.

Was muss ich tun, um darauf zugreifen zu können? Oder muss jedes Plugin komplett alle Bibliotheken selbst mitbringen?

Ein einfacher Aufruf (entsprechend Doku hier: https://guzzle.readthedocs.io/en/stable/quickstart.html) endet im Fehler: Uncaught Error: Call to undefined method GuzzleHttp\Client::request()

$client = new GuzzleHttp\Client(['base_url' => 'http://localhost:8080/']);
$response = $client->request('GET', 'foobar', ['query' => ['parameter' => 'wert']]);

 

Im Plugin vielleicht ganz oben „use GuzzleHttp;“ vergessen?

Laut IDE ist das „use“ unnötig, weil GuzzleHttp der Toplevel-Namespace ist. Macht leider auch keinen Unterschied in der Fehlermeldung.

Vielleicht wird ja so ein Schuh daraus:

$response = $client->createRequest('GET', 'foobar', ['query' => ['parameter' => 'wert']]);

 

>Uncaught Error: Call to undefined method GuzzleHttp\Client::request()

Die Fehlermeldung kommt daher, dass die Dokumentation für Guzzle 6.x gilt, welches ein anderes Interface verwendet. Meine Frage (https://forum.shopware.com/discussion/60525/konflikt-mit-guzzle-versionen#latest) geht ja in eine ähnliche Richtung; ich will in meinem Plugin die aktuelle Version von Guzzle verwenden, um nicht meine Implementation auf Guzzle 5.x umschreiben zu müssen…

1 „Gefällt mir“

Hey,

ihr müsst, wenn ihr direkt raw Guzzle benutzen wollt, 5 benutzen. Eigentlich ist es mittlerweile üblich PSR7 (https://www.php-fig.org/psr/psr-18/)  oder Httpplug (http://httplug.io/) zu verwenden, um garnicht solche Probleme zu haben.

2 „Gefällt mir“

Danke euch für die Antworten! Smile

Ich werde mal schauen, welche der drei Optionen ich nehme.

@Shyim schrieb:

Hey,

ihr müsst, wenn ihr direkt raw Guzzle benutzen wollt, 5 benutzen. Eigentlich ist es mittlerweile üblich PSR7 (https://www.php-fig.org/psr/psr-18/)  oder Httpplug (http://httplug.io/) zu verwenden, um garnicht solche Probleme zu haben.

Es ist auch ein Problem von Shopware, denke ich. Einerseits soll ein Plugin alle Abhängigkeiten mitbringen, andererseits führt genau das zu Konflikten. Und sollten PHP-Namespaces nicht genau solche Konflikte auch vermeiden?

 

PS : Guzzle nutzt das PSR-7 - Interface: Guzzle and PSR-7 — Guzzle Documentation

Bezüglich Httplug: Ich habe mich jetzt 2 Stunden durch die verschiedenen Dokumentationen gelesen, aber vor lauter Discovery, Interfaces, Adaptern, Clienten, Factories usw. kommt da nur langsam ein Durchblick zustande.

Hat jemand ein Codebeispiel bzw. eine Implementierung von Httplug in Shopware (oder irgendeiner anderen Applikation)? Danke im Voraus.

 

Paddelboot

Hallo Zusammen,

oder man benutzt den GuzzleHttpClient von Shopware, der als Service unter ‘http_client’ registriert ist.

 Damit kann man sehr einfach get, post, put… Aufrufe machen. URL-Parameter kann man dann mittels http_build_query

generieren, macht Guzzle ja genauso.

 

Viele Grüße,

Werner.