File tree Expand file tree Collapse file tree 3 files changed +52
-1
lines changed
Expand file tree Collapse file tree 3 files changed +52
-1
lines changed Original file line number Diff line number Diff line change 1414 "php" : " ^5.5 || ^7.0"
1515 },
1616 "require-dev" : {
17- "php-http/httplug" : " ^1.0| ^2.0" ,
17+ "php-http/httplug" : " ^1.0 || ^2.0" ,
1818 "php-http/message-factory" : " ^1.0" ,
1919 "puli/composer-plugin" : " 1.0.0-beta10" ,
2020 "phpspec/phpspec" : " ^2.4" ,
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Http \Discovery ;
4+
5+ use Http \Discovery \Exception \DiscoveryFailedException ;
6+ use Psr \Http \Client \ClientInterface ;
7+
8+ /**
9+ * Finds a PSR-18 HTTP Client.
10+ *
11+ * @author Tobias Nyholm <tobias.nyholm@gmail.com>
12+ */
13+ final class Psr18ClientDiscovery extends ClassDiscovery
14+ {
15+ /**
16+ * Finds a PSR-18 HTTP Client.
17+ *
18+ * @return ClientInterface
19+ *
20+ * @throws Exception\NotFoundException
21+ */
22+ public static function find ()
23+ {
24+ try {
25+ $ client = static ::findOneByType (ClientInterface::class);
26+ } catch (DiscoveryFailedException $ e ) {
27+ throw new \Http \Discovery \Exception \NotFoundException (
28+ 'No PSR-18 clients found. Make sure to install a package providing "psr/http-client-implementation". Example: "php-http/guzzle6-adapter". ' ,
29+ 0 ,
30+ $ e
31+ );
32+ }
33+
34+ return static ::instantiateClass ($ client );
35+ }
36+ }
Original file line number Diff line number Diff line change 1515use Http \Message \MessageFactory \DiactorosMessageFactory ;
1616use Http \Message \StreamFactory \DiactorosStreamFactory ;
1717use Http \Message \UriFactory \DiactorosUriFactory ;
18+ use Psr \Http \Client \ClientInterface as Psr18Client ;
1819use Zend \Diactoros \Request as DiactorosRequest ;
1920use Http \Message \MessageFactory \SlimMessageFactory ;
2021use Http \Message \StreamFactory \SlimStreamFactory ;
@@ -80,13 +81,27 @@ final class CommonClassesStrategy implements DiscoveryStrategy
8081 'condition ' => [\Buzz \Client \FileGetContents::class, \Buzz \Message \ResponseBuilder::class],
8182 ],
8283 ],
84+ Psr18Client::class => [],
8385 ];
8486
8587 /**
8688 * {@inheritdoc}
8789 */
8890 public static function getCandidates ($ type )
8991 {
92+ if (Psr18Client::class === $ type ) {
93+ $ candidates = self ::$ classes [PSR18Client::class];
94+
95+ // HTTPlug 2.0 clients implements PSR18Client too.
96+ foreach (self ::$ classes [HttpClient::class] as $ c ) {
97+ if (is_subclass_of ($ c ['class ' ], Psr18Client::class)) {
98+ $ candidates [] = $ c ;
99+ }
100+ }
101+
102+ return $ candidates ;
103+ }
104+
90105 if (isset (self ::$ classes [$ type ])) {
91106 return self ::$ classes [$ type ];
92107 }
You can’t perform that action at this time.
0 commit comments