|
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