26
26
use Http \Message \StreamFactory \SlimStreamFactory ;
27
27
use Http \Message \UriFactory \SlimUriFactory ;
28
28
use Slim \Http \Request as SlimRequest ;
29
+ use GuzzleHttp \Client as GuzzleHttp ;
29
30
use Http \Adapter \Guzzle6 \Client as Guzzle6 ;
30
31
use Http \Adapter \Guzzle5 \Client as Guzzle5 ;
31
32
use Http \Client \Curl \Client as Curl ;
@@ -95,6 +96,10 @@ final class CommonClassesStrategy implements DiscoveryStrategy
95
96
'class ' => [self ::class, 'symfonyPsr18Instantiate ' ],
96
97
'condition ' => [SymfonyPsr18::class, Psr17RequestFactory::class],
97
98
],
99
+ [
100
+ 'class ' => GuzzleHttp::class,
101
+ 'condition ' => GuzzleHttp::class,
102
+ ],
98
103
[
99
104
'class ' => [self ::class, 'buzzInstantiate ' ],
100
105
'condition ' => [\Buzz \Client \FileGetContents::class, \Buzz \Message \ResponseBuilder::class],
@@ -108,27 +113,43 @@ final class CommonClassesStrategy implements DiscoveryStrategy
108
113
public static function getCandidates ($ type )
109
114
{
110
115
if (Psr18Client::class === $ type ) {
111
- $ candidates = self ::$ classes [PSR18Client::class];
116
+ return self ::getPsr18Candidates ();
117
+ }
118
+
119
+ return self ::$ classes [$ type ] ?? [];
120
+ }
121
+
122
+ /**
123
+ * @return array The return value is always an array with zero or more elements. Each
124
+ * element is an array with two keys ['class' => string, 'condition' => mixed].
125
+ */
126
+ private static function getPsr18Candidates ()
127
+ {
128
+ $ candidates = [];
112
129
113
- // HTTPlug 2.0 clients implements PSR18Client too.
114
- foreach (self ::$ classes [HttpClient::class] as $ c ) {
115
- try {
116
- if (is_subclass_of ($ c ['class ' ], Psr18Client::class)) {
117
- $ candidates [] = $ c ;
118
- }
119
- } catch (\Throwable $ e ) {
120
- trigger_error (sprintf ('Got exception "%s (%s)" while checking if a PSR-18 Client is available ' , get_class ($ e ), $ e ->getMessage ()), E_USER_WARNING );
130
+ // Guzzle 6 does not implement the PSR-18 client interface, but Guzzle 7 does.
131
+ foreach (self ::$ classes [Psr18Client::class] ?? [] as $ c ) {
132
+ if (GuzzleHttp::class === $ c ['class ' ]) {
133
+ if (defined ('GuzzleHttp\ClientInterface::MAJOR_VERSION ' )) {
134
+ $ candidates [] = $ c ;
121
135
}
136
+ } else {
137
+ $ candidates [] = $ c ;
122
138
}
123
-
124
- return $ candidates ;
125
139
}
126
140
127
- if (isset (self ::$ classes [$ type ])) {
128
- return self ::$ classes [$ type ];
141
+ // HTTPlug 2.0 clients implements PSR18Client too.
142
+ foreach (self ::$ classes [HttpClient::class] as $ c ) {
143
+ try {
144
+ if (is_subclass_of ($ c ['class ' ], Psr18Client::class)) {
145
+ $ candidates [] = $ c ;
146
+ }
147
+ } catch (\Throwable $ e ) {
148
+ trigger_error (sprintf ('Got exception "%s (%s)" while checking if a PSR-18 Client is available ' , get_class ($ e ), $ e ->getMessage ()), E_USER_WARNING );
149
+ }
129
150
}
130
151
131
- return [] ;
152
+ return $ candidates ;
132
153
}
133
154
134
155
public static function buzzInstantiate ()
0 commit comments