Ich verwende Dependency-Injection, um Instanzen von Guzzles HTTP-Client zu injizieren. Ich habe mehrere Datenprovider-Klassen, die externe Dienste aufrufen, von denen einige über Proxies geroutet werden müssen. Ich habe eine leere Schnittstelle ConnectViaProxy
, die für diese Klassen implementiert ist. Ich mag eine Guzzle Instanz mit dem Proxy-Option Set binden, aber ich kann nicht verwenden:Wie kann ich eine andere Implementierung bereitstellen, wenn die Klasse eine Schnittstelle implementiert, die den Laravel-Container verwendet?
$this->app->when(ConnectViaProxy::class)
->needs(GuzzleClient::class)
->give(function(): ProxiedGuzzle {
return new ProxiedGuzzle();
});
Da when
eine konkrete Klasse erfordert, keine Schnittstelle. Hier
ist ein Beispiel für einen Anbieter, die Proxy-Klasse zugänglich werden soll:
use GuzzleHttp\Client as GuzzleClient;
class FooProvider implements Provider, ConnectViaProxy
{
public function __construct(GuzzleClient $client)
{
// Should be an instance of ProxiedGuzzle
dd($client);
}
}
Und ein Beispiel für einen Anbieter, der nicht über einen Proxy werden soll:
use GuzzleHttp\Client as GuzzleClient;
class BarProvider implements Provider
{
public function __construct(GuzzleClient $client)
{
// Should be an instance of GuzzleClient
dd($client);
}
}
Und hier ist die ProxiedGuzzle
Klasse:
use GuzzleHttp\Client as GuzzleClient;
class ProxiedGuzzle extends GuzzleClient
{
public function __construct()
{
parent::__construct([
'proxy' => [
'http' => PROXY_IP,
'https' => PROXY_IP,
],
]);
}
}
Irgendeine Idee, wie ich das tun könnte?
Dank