Open Journal Systems  3.3.0
CommonClassesStrategy.php
1 <?php
2 
4 
6 use GuzzleHttp\Psr7\Request as GuzzleRequest;
13 use Psr\Http\Message\RequestFactoryInterface as Psr17RequestFactory;
23 use Psr\Http\Client\ClientInterface as Psr18Client;
24 use Zend\Diactoros\Request as DiactorosRequest;
28 use Slim\Http\Request as SlimRequest;
29 use Http\Adapter\Guzzle6\Client as Guzzle6;
30 use Http\Adapter\Guzzle5\Client as Guzzle5;
31 use Http\Client\Curl\Client as Curl;
32 use Http\Client\Socket\Client as Socket;
33 use Http\Adapter\React\Client as React;
34 use Http\Adapter\Buzz\Client as Buzz;
35 use Http\Adapter\Cake\Client as Cake;
36 use Http\Adapter\Zend\Client as Zend;
37 use Http\Adapter\Artax\Client as Artax;
38 use Symfony\Component\HttpClient\HttplugClient as SymfonyHttplug;
39 use Symfony\Component\HttpClient\Psr18Client as SymfonyPsr18;
40 use Nyholm\Psr7\Factory\HttplugFactory as NyholmHttplugFactory;
41 
48 {
52  private static $classes = [
53  MessageFactory::class => [
54  ['class' => NyholmHttplugFactory::class, 'condition' => [NyholmHttplugFactory::class]],
55  ['class' => GuzzleMessageFactory::class, 'condition' => [GuzzleRequest::class, GuzzleMessageFactory::class]],
56  ['class' => DiactorosMessageFactory::class, 'condition' => [DiactorosRequest::class, DiactorosMessageFactory::class]],
57  ['class' => SlimMessageFactory::class, 'condition' => [SlimRequest::class, SlimMessageFactory::class]],
58  ],
59  StreamFactory::class => [
60  ['class' => NyholmHttplugFactory::class, 'condition' => [NyholmHttplugFactory::class]],
61  ['class' => GuzzleStreamFactory::class, 'condition' => [GuzzleRequest::class, GuzzleStreamFactory::class]],
62  ['class' => DiactorosStreamFactory::class, 'condition' => [DiactorosRequest::class, DiactorosStreamFactory::class]],
63  ['class' => SlimStreamFactory::class, 'condition' => [SlimRequest::class, SlimStreamFactory::class]],
64  ],
65  UriFactory::class => [
66  ['class' => NyholmHttplugFactory::class, 'condition' => [NyholmHttplugFactory::class]],
67  ['class' => GuzzleUriFactory::class, 'condition' => [GuzzleRequest::class, GuzzleUriFactory::class]],
68  ['class' => DiactorosUriFactory::class, 'condition' => [DiactorosRequest::class, DiactorosUriFactory::class]],
69  ['class' => SlimUriFactory::class, 'condition' => [SlimRequest::class, SlimUriFactory::class]],
70  ],
71  HttpAsyncClient::class => [
72  ['class' => SymfonyHttplug::class, 'condition' => [SymfonyHttplug::class, Promise::class, RequestFactory::class, [self::class, 'isPsr17FactoryInstalled']]],
73  ['class' => Guzzle6::class, 'condition' => Guzzle6::class],
74  ['class' => Curl::class, 'condition' => Curl::class],
75  ['class' => React::class, 'condition' => React::class],
76  ],
77  HttpClient::class => [
78  ['class' => SymfonyHttplug::class, 'condition' => [SymfonyHttplug::class, RequestFactory::class, [self::class, 'isPsr17FactoryInstalled']]],
79  ['class' => Guzzle6::class, 'condition' => Guzzle6::class],
80  ['class' => Guzzle5::class, 'condition' => Guzzle5::class],
81  ['class' => Curl::class, 'condition' => Curl::class],
82  ['class' => Socket::class, 'condition' => Socket::class],
83  ['class' => Buzz::class, 'condition' => Buzz::class],
84  ['class' => React::class, 'condition' => React::class],
85  ['class' => Cake::class, 'condition' => Cake::class],
86  ['class' => Zend::class, 'condition' => Zend::class],
87  ['class' => Artax::class, 'condition' => Artax::class],
88  [
89  'class' => [self::class, 'buzzInstantiate'],
90  'condition' => [\Buzz\Client\FileGetContents::class, \Buzz\Message\ResponseBuilder::class],
91  ],
92  ],
93  Psr18Client::class => [
94  [
95  'class' => [self::class, 'symfonyPsr18Instantiate'],
96  'condition' => [SymfonyPsr18::class, Psr17RequestFactory::class],
97  ],
98  [
99  'class' => [self::class, 'buzzInstantiate'],
100  'condition' => [\Buzz\Client\FileGetContents::class, \Buzz\Message\ResponseBuilder::class],
101  ],
102  ],
103  ];
104 
108  public static function getCandidates($type)
109  {
110  if (Psr18Client::class === $type) {
111  $candidates = self::$classes[PSR18Client::class];
112 
113  // HTTPlug 2.0 clients implements PSR18Client too.
114  foreach (self::$classes[HttpClient::class] as $c) {
115  if (is_subclass_of($c['class'], Psr18Client::class)) {
116  $candidates[] = $c;
117  }
118  }
119 
120  return $candidates;
121  }
122 
123  if (isset(self::$classes[$type])) {
124  return self::$classes[$type];
125  }
126 
127  return [];
128  }
129 
130  public static function buzzInstantiate()
131  {
132  return new \Buzz\Client\FileGetContents(MessageFactoryDiscovery::find());
133  }
134 
135  public static function symfonyPsr18Instantiate()
136  {
138  }
139 
145  public static function isPsr17FactoryInstalled()
146  {
147  try {
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  }
159 }
Http\Client\HttpAsyncClient
Definition: HttpAsyncClient.php:13
Http\Message\UriFactory\DiactorosUriFactory
Definition: DiactorosUriFactory.php:14
Http\Discovery\Psr17FactoryDiscovery\findResponseFactory
static findResponseFactory()
Definition: Psr17FactoryDiscovery.php:50
Psr\Http\Client\ClientInterface
Definition: vendor/psr/http-client/src/ClientInterface.php:8
Http\Discovery\Exception\NotFoundException
Definition: Exception/NotFoundException.php:14
Http\Message\MessageFactory\DiactorosMessageFactory
Definition: DiactorosMessageFactory.php:15
Http\Message\StreamFactory\DiactorosStreamFactory
Definition: DiactorosStreamFactory.php:14
Http\Discovery\Strategy
Definition: CommonClassesStrategy.php:3
Http\Message\StreamFactory
Definition: DiactorosStreamFactory.php:3
Http\Discovery\Strategy\CommonClassesStrategy\getCandidates
static getCandidates($type)
Definition: CommonClassesStrategy.php:108
Http\Discovery\Strategy\CommonClassesStrategy\symfonyPsr18Instantiate
static symfonyPsr18Instantiate()
Definition: CommonClassesStrategy.php:135
Http\Message\UriFactory\SlimUriFactory
Definition: SlimUriFactory.php:14
Http\Client\HttpClient
Definition: HttpClient.php:13
Http\Message\StreamFactory\SlimStreamFactory
Definition: SlimStreamFactory.php:14
Http\Discovery\MessageFactoryDiscovery\find
static find()
Definition: MessageFactoryDiscovery.php:24
Http\Message\UriFactory
Definition: DiactorosUriFactory.php:3
Http\Message\UriFactory\GuzzleUriFactory
Definition: GuzzleUriFactory.php:13
Http\Message\MessageFactory
Definition: DiactorosMessageFactory.php:3
Http\Discovery\Strategy\CommonClassesStrategy\buzzInstantiate
static buzzInstantiate()
Definition: CommonClassesStrategy.php:130
Http\Message\MessageFactory\GuzzleMessageFactory
Definition: GuzzleMessageFactory.php:14
Http\Discovery\Psr17FactoryDiscovery
Definition: Psr17FactoryDiscovery.php:18
Http\Discovery\Psr17FactoryDiscovery\findStreamFactory
static findStreamFactory()
Definition: Psr17FactoryDiscovery.php:82
Http\Discovery\Strategy\CommonClassesStrategy\isPsr17FactoryInstalled
static isPsr17FactoryInstalled()
Definition: CommonClassesStrategy.php:145
Http\Adapter\Guzzle6\Client
Definition: vendor/php-http/guzzle6-adapter/src/Client.php:21
Http\Discovery\MessageFactoryDiscovery
Definition: MessageFactoryDiscovery.php:15
Http\Message\StreamFactory\GuzzleStreamFactory
Definition: GuzzleStreamFactory.php:12
GuzzleHttp\Psr7\Request
Definition: vendor/guzzlehttp/psr7/src/Request.php:12
Http\Discovery\Strategy\CommonClassesStrategy
Definition: CommonClassesStrategy.php:47
GuzzleHttp\Promise\Promise
Definition: guzzlehttp/promises/src/Promise.php:9
Http\Discovery\Strategy\DiscoveryStrategy
Definition: DiscoveryStrategy.php:10
Http\Message\MessageFactory\SlimMessageFactory
Definition: SlimMessageFactory.php:17
Http\Message\RequestFactory
Definition: vendor/php-http/message-factory/src/RequestFactory.php:14