|
6 | 6 | use GuzzleHttp\Psr7\Request as GuzzleRequest;
|
7 | 7 | use Http\Client\HttpAsyncClient;
|
8 | 8 | use Http\Client\HttpClient;
|
| 9 | +use Http\Discovery\Exception\NotFoundException; |
9 | 10 | use Http\Discovery\MessageFactoryDiscovery;
|
10 | 11 | use Http\Discovery\Psr17FactoryDiscovery;
|
11 | 12 | use Http\Message\RequestFactory;
|
@@ -68,13 +69,13 @@ final class CommonClassesStrategy implements DiscoveryStrategy
|
68 | 69 | ['class' => SlimUriFactory::class, 'condition' => [SlimRequest::class, SlimUriFactory::class]],
|
69 | 70 | ],
|
70 | 71 | HttpAsyncClient::class => [
|
71 |
| - ['class' => SymfonyHttplug::class, 'condition' => [SymfonyHttplug::class, Promise::class, RequestFactory::class]], |
| 72 | + ['class' => SymfonyHttplug::class, 'condition' => [SymfonyHttplug::class, Promise::class, RequestFactory::class, [self::class, 'isPsr17FactoryInstalled']]], |
72 | 73 | ['class' => Guzzle6::class, 'condition' => Guzzle6::class],
|
73 | 74 | ['class' => Curl::class, 'condition' => Curl::class],
|
74 | 75 | ['class' => React::class, 'condition' => React::class],
|
75 | 76 | ],
|
76 | 77 | HttpClient::class => [
|
77 |
| - ['class' => SymfonyHttplug::class, 'condition' => [SymfonyHttplug::class, RequestFactory::class, Psr17RequestFactory::class]], |
| 78 | + ['class' => SymfonyHttplug::class, 'condition' => [SymfonyHttplug::class, RequestFactory::class, [self::class, 'isPsr17FactoryInstalled']]], |
78 | 79 | ['class' => Guzzle6::class, 'condition' => Guzzle6::class],
|
79 | 80 | ['class' => Guzzle5::class, 'condition' => Guzzle5::class],
|
80 | 81 | ['class' => Curl::class, 'condition' => Curl::class],
|
@@ -135,4 +136,24 @@ public static function symfonyPsr18Instantiate()
|
135 | 136 | {
|
136 | 137 | return new SymfonyPsr18(null, Psr17FactoryDiscovery::findResponseFactory(), Psr17FactoryDiscovery::findStreamFactory());
|
137 | 138 | }
|
| 139 | + |
| 140 | + /** |
| 141 | + * Can be used as a condition. |
| 142 | + * |
| 143 | + * @return bool |
| 144 | + */ |
| 145 | + public static function isPsr17FactoryInstalled() |
| 146 | + { |
| 147 | + try { |
| 148 | + Psr17FactoryDiscovery::findResponseFactory(); |
| 149 | + } catch (NotFoundException $e) { |
| 150 | + return false; |
| 151 | + } catch (\Throwable $e) { |
| 152 | + trigger_error(sprintf('Got exception "%s (%s)" while checking if a PSR-17 ResponseFactory is available', get_class($e), $e->getMessage()), E_USER_WARNING); |
| 153 | + |
| 154 | + return false; |
| 155 | + } |
| 156 | + |
| 157 | + return true; |
| 158 | + } |
138 | 159 | }
|
0 commit comments