feature #33980 [HttpClient] try using php-http/discovery when nyholm/psr7 is not installed (nicolas-grekas)
This PR was merged into the 4.4 branch.
Discussion
----------
[HttpClient] try using php-http/discovery when nyholm/psr7 is not installed
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Tickets | -
| License | MIT
| Doc PR | -
In case one has `php-http/discovery`, we can leverage it...
Commits
-------
6e0cb581a1
[HttpClient] try using php-http/discovery when nyholm/psr7 is not installed
This commit is contained in:
commit
85c106558d
@ -16,6 +16,7 @@ use Http\Client\Exception\NetworkException;
|
||||
use Http\Client\Exception\RequestException;
|
||||
use Http\Client\HttpAsyncClient;
|
||||
use Http\Client\HttpClient as HttplugInterface;
|
||||
use Http\Discovery\Psr17FactoryDiscovery;
|
||||
use Http\Message\RequestFactory;
|
||||
use Http\Message\StreamFactory;
|
||||
use Http\Message\UriFactory;
|
||||
@ -70,13 +71,13 @@ final class HttplugClient implements HttplugInterface, HttpAsyncClient, RequestF
|
||||
$this->promisePool = \function_exists('GuzzleHttp\Promise\queue') ? new \SplObjectStorage() : null;
|
||||
|
||||
if (null === $this->responseFactory || null === $this->streamFactory) {
|
||||
if (!class_exists(Psr17Factory::class)) {
|
||||
if (!class_exists(Psr17Factory::class) && !class_exists(Psr17FactoryDiscovery::class)) {
|
||||
throw new \LogicException('You cannot use the "Symfony\Component\HttpClient\HttplugClient" as no PSR-17 factories have been provided. Try running "composer require nyholm/psr7".');
|
||||
}
|
||||
|
||||
$psr17Factory = new Psr17Factory();
|
||||
$this->responseFactory = $this->responseFactory ?? $psr17Factory;
|
||||
$this->streamFactory = $this->streamFactory ?? $psr17Factory;
|
||||
$psr17Factory = class_exists(Psr17Factory::class, false) ? new Psr17Factory() : null;
|
||||
$this->responseFactory = $this->responseFactory ?? $psr17Factory ?? Psr17FactoryDiscovery::findResponseFactory();
|
||||
$this->streamFactory = $this->streamFactory ?? $psr17Factory ?? Psr17FactoryDiscovery::findStreamFactory();
|
||||
}
|
||||
|
||||
$this->waitLoop = new HttplugWaitLoop($this->client, $this->promisePool, $this->responseFactory, $this->streamFactory);
|
||||
@ -144,10 +145,12 @@ final class HttplugClient implements HttplugInterface, HttpAsyncClient, RequestF
|
||||
{
|
||||
if ($this->responseFactory instanceof RequestFactoryInterface) {
|
||||
$request = $this->responseFactory->createRequest($method, $uri);
|
||||
} elseif (!class_exists(Request::class)) {
|
||||
throw new \LogicException(sprintf('You cannot use "%s()" as the "nyholm/psr7" package is not installed. Try running "composer require nyholm/psr7".', __METHOD__));
|
||||
} else {
|
||||
} elseif (class_exists(Request::class)) {
|
||||
$request = new Request($method, $uri);
|
||||
} elseif (class_exists(Psr17FactoryDiscovery::class)) {
|
||||
$request = Psr17FactoryDiscovery::findRequestFactory()->createRequest($method, $uri);
|
||||
} else {
|
||||
throw new \LogicException(sprintf('You cannot use "%s()" as the "nyholm/psr7" package is not installed. Try running "composer require nyholm/psr7".', __METHOD__));
|
||||
}
|
||||
|
||||
$request = $request
|
||||
@ -199,11 +202,15 @@ final class HttplugClient implements HttplugInterface, HttpAsyncClient, RequestF
|
||||
return $this->responseFactory->createUri($uri);
|
||||
}
|
||||
|
||||
if (!class_exists(Uri::class)) {
|
||||
throw new \LogicException(sprintf('You cannot use "%s()" as the "nyholm/psr7" package is not installed. Try running "composer require nyholm/psr7".', __METHOD__));
|
||||
if (class_exists(Uri::class)) {
|
||||
return new Uri($uri);
|
||||
}
|
||||
|
||||
return new Uri($uri);
|
||||
if (class_exists(Psr17FactoryDiscovery::class)) {
|
||||
return Psr17FactoryDiscovery::findUrlFactory()->createUri($uri);
|
||||
}
|
||||
|
||||
throw new \LogicException(sprintf('You cannot use "%s()" as the "nyholm/psr7" package is not installed. Try running "composer require nyholm/psr7".', __METHOD__));
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace Symfony\Component\HttpClient;
|
||||
|
||||
use Http\Discovery\Psr17FactoryDiscovery;
|
||||
use Nyholm\Psr7\Factory\Psr17Factory;
|
||||
use Nyholm\Psr7\Request;
|
||||
use Nyholm\Psr7\Uri;
|
||||
@ -63,13 +64,13 @@ final class Psr18Client implements ClientInterface, RequestFactoryInterface, Str
|
||||
return;
|
||||
}
|
||||
|
||||
if (!class_exists(Psr17Factory::class)) {
|
||||
if (!class_exists(Psr17Factory::class) && !class_exists(Psr17FactoryDiscovery::class)) {
|
||||
throw new \LogicException('You cannot use the "Symfony\Component\HttpClient\Psr18Client" as no PSR-17 factories have been provided. Try running "composer require nyholm/psr7".');
|
||||
}
|
||||
|
||||
$psr17Factory = new Psr17Factory();
|
||||
$this->responseFactory = $this->responseFactory ?? $psr17Factory;
|
||||
$this->streamFactory = $this->streamFactory ?? $psr17Factory;
|
||||
$psr17Factory = class_exists(Psr17Factory::class, false) ? new Psr17Factory() : null;
|
||||
$this->responseFactory = $this->responseFactory ?? $psr17Factory ?? Psr17FactoryDiscovery::findResponseFactory();
|
||||
$this->streamFactory = $this->streamFactory ?? $psr17Factory ?? Psr17FactoryDiscovery::findStreamFactory();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -124,11 +125,15 @@ final class Psr18Client implements ClientInterface, RequestFactoryInterface, Str
|
||||
return $this->responseFactory->createRequest($method, $uri);
|
||||
}
|
||||
|
||||
if (!class_exists(Request::class)) {
|
||||
throw new \LogicException(sprintf('You cannot use "%s()" as the "nyholm/psr7" package is not installed. Try running "composer require nyholm/psr7".', __METHOD__));
|
||||
if (class_exists(Request::class)) {
|
||||
return new Request($method, $uri);
|
||||
}
|
||||
|
||||
return new Request($method, $uri);
|
||||
if (class_exists(Psr17FactoryDiscovery::class)) {
|
||||
return Psr17FactoryDiscovery::findRequestFactory()->createRequest($method, $uri);
|
||||
}
|
||||
|
||||
throw new \LogicException(sprintf('You cannot use "%s()" as the "nyholm/psr7" package is not installed. Try running "composer require nyholm/psr7".', __METHOD__));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -170,11 +175,15 @@ final class Psr18Client implements ClientInterface, RequestFactoryInterface, Str
|
||||
return $this->responseFactory->createUri($uri);
|
||||
}
|
||||
|
||||
if (!class_exists(Uri::class)) {
|
||||
throw new \LogicException(sprintf('You cannot use "%s()" as the "nyholm/psr7" package is not installed. Try running "composer require nyholm/psr7".', __METHOD__));
|
||||
if (class_exists(Uri::class)) {
|
||||
return new Uri($uri);
|
||||
}
|
||||
|
||||
return new Uri($uri);
|
||||
if (class_exists(Psr17FactoryDiscovery::class)) {
|
||||
return Psr17FactoryDiscovery::findUrlFactory()->createUri($uri);
|
||||
}
|
||||
|
||||
throw new \LogicException(sprintf('You cannot use "%s()" as the "nyholm/psr7" package is not installed. Try running "composer require nyholm/psr7".', __METHOD__));
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user