Skip to content

Commit 47bb000

Browse files
authored
Psr17: replace usage of deprecated PHP-HTTP Factories with PSR-17 factories (#439)
1 parent 143dba2 commit 47bb000

21 files changed

+86
-201
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
The change log describes what is "Added", "Removed", "Changed" or "Fixed" between each release.
44

5+
# Version 2
6+
7+
# 2.0.0 - (unreleased)
8+
- Fixed a deprecation when creating a `HttpMethodsClient` via `http_methods_client: true`. Only PSR-17 factories are now passed as constructor arguments.
9+
- Changed the default stream factory argument for the cache plugin. This now requires a PSR-17 StreamFactoryInterface instance.
10+
- Creating a client using the `BuzzFactory` no longer accepts `verify_peer` and `verify_host` config options. Only a boolean `verify` flag is accepted, covering both previous options.
11+
- Removed support of deprecated PHP-HTTP factories, only PSR-17 factories are now supported and used.
12+
- Removed `message_factory`, `uri_factory`, and `stream_factory` classes config option. You can configure your own factories via psr17_*_factory classes config
13+
- Removed support for guzzle5-adapter
14+
515
# Version 1
616

717
# 1.31.0 - 2023-11-06

composer.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@
2626
],
2727
"require": {
2828
"php": "^7.3 || ^8.0",
29-
"php-http/client-common": "^1.9 || ^2.0",
29+
"php-http/client-common": "^2.0",
3030
"php-http/client-implementation": "^1.0",
3131
"php-http/discovery": "^1.14",
3232
"php-http/httplug": "^2.0",
3333
"php-http/logger-plugin": "^1.1",
3434
"php-http/message": "^1.9",
35-
"php-http/message-factory": "^1.0.2",
3635
"php-http/stopwatch-plugin": "^1.2",
36+
"psr/http-factory-implementation": "^1.0",
3737
"psr/http-message": "^1.0 || ^2.0",
3838
"symfony/config": "^4.4 || ^5.0 || ^6.0",
3939
"symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0",
@@ -44,7 +44,10 @@
4444
"conflict": {
4545
"php-http/guzzle6-adapter": "<1.1",
4646
"php-http/curl-client": "<2.0",
47-
"php-http/socket-client": "<2.0"
47+
"php-http/socket-client": "<2.0",
48+
"kriswallsmith/buzz": "<0.17",
49+
"php-http/react-adapter": "<3.0",
50+
"php-http/cache-plugin": "<1.7"
4851
},
4952
"require-dev": {
5053
"guzzlehttp/psr7": "^1.7 || ^2.0",

src/ClientFactory/BuzzFactory.php

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
namespace Http\HttplugBundle\ClientFactory;
66

77
use Buzz\Client\FileGetContents;
8-
use Http\Adapter\Buzz\Client as Adapter;
9-
use Http\Message\MessageFactory;
8+
use Psr\Http\Message\ResponseFactoryInterface;
109
use Symfony\Component\OptionsResolver\OptionsResolver;
1110

1211
/**
@@ -15,33 +14,25 @@
1514
class BuzzFactory implements ClientFactory
1615
{
1716
/**
18-
* @var MessageFactory
17+
* @var ResponseFactoryInterface
1918
*/
20-
private $messageFactory;
19+
private $responseFactory;
2120

22-
public function __construct(MessageFactory $messageFactory)
21+
public function __construct(ResponseFactoryInterface $responseFactory)
2322
{
24-
$this->messageFactory = $messageFactory;
23+
$this->responseFactory = $responseFactory;
2524
}
2625

2726
/**
2827
* {@inheritdoc}
2928
*/
3029
public function createClient(array $config = [])
3130
{
32-
if (!class_exists('Http\Adapter\Buzz\Client')) {
33-
throw new \LogicException('To use the Buzz adapter you need to install the "php-http/buzz-adapter" package.');
31+
if (!class_exists('Buzz\Client\FileGetContents')) {
32+
throw new \LogicException('To use the Buzz you need to install the "kriswallsmith/buzz" package.');
3433
}
3534

36-
$client = new FileGetContents();
37-
$options = $this->getOptions($config);
38-
39-
$client->setTimeout($options['timeout']);
40-
$client->setVerifyPeer($options['verify_peer']);
41-
$client->setVerifyHost($options['verify_host']);
42-
$client->setProxy($options['proxy']);
43-
44-
return new Adapter($client, $this->messageFactory);
35+
return new FileGetContents($this->responseFactory, $this->getOptions($config));
4536
}
4637

4738
/**
@@ -53,14 +44,12 @@ private function getOptions(array $config = [])
5344

5445
$resolver->setDefaults([
5546
'timeout' => 5,
56-
'verify_peer' => true,
57-
'verify_host' => 2,
47+
'verify' => true,
5848
'proxy' => null,
5949
]);
6050

6151
$resolver->setAllowedTypes('timeout', 'int');
62-
$resolver->setAllowedTypes('verify_peer', 'bool');
63-
$resolver->setAllowedTypes('verify_host', 'int');
52+
$resolver->setAllowedTypes('verify', 'bool');
6453
$resolver->setAllowedTypes('proxy', ['string', 'null']);
6554

6655
return $resolver->resolve($config);

src/ClientFactory/Guzzle5Factory.php

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/ClientFactory/ReactFactory.php

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,12 @@
55
namespace Http\HttplugBundle\ClientFactory;
66

77
use Http\Adapter\React\Client;
8-
use Http\Message\MessageFactory;
98

109
/**
1110
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
1211
*/
1312
class ReactFactory implements ClientFactory
1413
{
15-
/**
16-
* @var MessageFactory
17-
*/
18-
private $messageFactory;
19-
20-
public function __construct(MessageFactory $messageFactory)
21-
{
22-
$this->messageFactory = $messageFactory;
23-
}
24-
2514
/**
2615
* {@inheritdoc}
2716
*/
@@ -31,6 +20,6 @@ public function createClient(array $config = [])
3120
throw new \LogicException('To use the React adapter you need to install the "php-http/react-adapter" package.');
3221
}
3322

34-
return new Client($this->messageFactory);
23+
return new Client();
3524
}
3625
}

src/ClientFactory/SocketFactory.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,12 @@
55
namespace Http\HttplugBundle\ClientFactory;
66

77
use Http\Client\Socket\Client;
8-
use Http\Message\MessageFactory;
98

109
/**
1110
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
1211
*/
1312
class SocketFactory implements ClientFactory
1413
{
15-
/**
16-
* @var MessageFactory
17-
*/
18-
private $messageFactory;
19-
20-
public function __construct(MessageFactory $messageFactory)
21-
{
22-
$this->messageFactory = $messageFactory;
23-
}
24-
2514
/**
2615
* {@inheritdoc}
2716
*/

src/DependencyInjection/Configuration.php

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,10 @@ public function getConfigTreeBuilder(): TreeBuilder
6666
->validate()
6767
->ifTrue(function ($v) {
6868
return !empty($v['classes']['client'])
69-
|| !empty($v['classes']['message_factory'])
70-
|| !empty($v['classes']['uri_factory'])
71-
|| !empty($v['classes']['stream_factory']);
69+
|| !empty($v['classes']['psr17_request_factory'])
70+
|| !empty($v['classes']['psr17_response_factory'])
71+
|| !empty($v['classes']['psr17_uri_factory'])
72+
|| !empty($v['classes']['psr17_stream_factory']);
7273
})
7374
->then(function ($v) {
7475
foreach ($v['classes'] as $key => $class) {
@@ -119,9 +120,6 @@ public function getConfigTreeBuilder(): TreeBuilder
119120
->children()
120121
->scalarNode('client')->defaultValue('httplug.client.default')->end()
121122
->scalarNode('psr18_client')->defaultValue('httplug.psr18_client.default')->end()
122-
->scalarNode('message_factory')->defaultValue('httplug.message_factory.default')->end()
123-
->scalarNode('uri_factory')->defaultValue('httplug.uri_factory.default')->end()
124-
->scalarNode('stream_factory')->defaultValue('httplug.stream_factory.default')->end()
125123
->scalarNode('psr17_request_factory')->defaultValue('httplug.psr17_request_factory.default')->end()
126124
->scalarNode('psr17_response_factory')->defaultValue('httplug.psr17_response_factory.default')->end()
127125
->scalarNode('psr17_stream_factory')->defaultValue('httplug.psr17_stream_factory.default')->end()
@@ -136,9 +134,6 @@ public function getConfigTreeBuilder(): TreeBuilder
136134
->children()
137135
->scalarNode('client')->defaultNull()->end()
138136
->scalarNode('psr18_client')->defaultNull()->end()
139-
->scalarNode('message_factory')->defaultNull()->end()
140-
->scalarNode('uri_factory')->defaultNull()->end()
141-
->scalarNode('stream_factory')->defaultNull()->end()
142137
->scalarNode('psr17_request_factory')->defaultNull()->end()
143138
->scalarNode('psr17_response_factory')->defaultNull()->end()
144139
->scalarNode('psr17_stream_factory')->defaultNull()->end()
@@ -857,7 +852,7 @@ private function createCachePluginNode(): NodeDefinition
857852
->end()
858853
->scalarNode('stream_factory')
859854
->info('This must be a service id to a service implementing '.StreamFactory::class)
860-
->defaultValue('httplug.stream_factory')
855+
->defaultValue('httplug.psr17_stream_factory')
861856
->cannotBeEmpty()
862857
->end()
863858
->end()

src/DependencyInjection/HttplugExtension.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ function ($id) {
486486
if ($arguments['http_methods_client']) {
487487
$container
488488
->register($serviceId.'.http_methods', HttpMethodsClient::class)
489-
->setArguments([new Reference($serviceId.'.http_methods.inner'), new Reference('httplug.message_factory')])
489+
->setArguments([new Reference($serviceId.'.http_methods.inner'), new Reference('httplug.psr17_request_factory'), new Reference('httplug.psr17_stream_factory')])
490490
->setPublic($arguments['public'] ? true : false)
491491
->setDecoratedService($serviceId)
492492
;
@@ -513,7 +513,7 @@ private function createUri(ContainerBuilder $container, $serviceId, $uri): void
513513
$container
514514
->register($serviceId, UriInterface::class)
515515
->setPublic(false)
516-
->setFactory([new Reference('httplug.uri_factory'), 'createUri'])
516+
->setFactory([new Reference('httplug.psr17_uri_factory'), 'createUri'])
517517
->addArgument($uri)
518518
;
519519
}

src/Resources/config/data-collector.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,6 @@
6363
<argument type="service" id="httplug.collector.formatter"/>
6464
<argument type="service" id="debug.stopwatch"/>
6565
</service>
66-
<service id="httplug.collector.factory.guzzle5" class="Http\HttplugBundle\Collector\ProfileClientFactory" decorates="httplug.factory.guzzle5" public="false">
67-
<argument type="service" id="httplug.collector.factory.guzzle5.inner"/>
68-
<argument type="service" id="httplug.collector.collector"/>
69-
<argument type="service" id="httplug.collector.formatter"/>
70-
<argument type="service" id="debug.stopwatch"/>
71-
</service>
7266
<service id="httplug.collector.factory.guzzle6" class="Http\HttplugBundle\Collector\ProfileClientFactory" decorates="httplug.factory.guzzle6" public="false">
7367
<argument type="service" id="httplug.collector.factory.guzzle6.inner"/>
7468
<argument type="service" id="httplug.collector.collector"/>

src/Resources/config/services.xml

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,6 @@
2222
</service>
2323

2424
<!-- Discovery with autowiring support -->
25-
<service id="httplug.message_factory.default" class="Http\Message\MessageFactory">
26-
<factory class="Http\Discovery\MessageFactoryDiscovery" method="find" />
27-
</service>
28-
<service id="Http\Message\MessageFactory" alias="httplug.message_factory" public="false" />
29-
<service id="Http\Message\RequestFactory" alias="httplug.message_factory" public="false" />
30-
<service id="Http\Message\ResponseFactory" alias="httplug.message_factory" public="false" />
31-
32-
<service id="httplug.stream_factory.default" class="Http\Message\StreamFactory">
33-
<factory class="Http\Discovery\StreamFactoryDiscovery" method="find" />
34-
</service>
35-
<service id="Http\Message\StreamFactory" alias="httplug.stream_factory" public="false" />
36-
37-
<service id="httplug.uri_factory.default" class="Http\Message\UriFactory">
38-
<factory class="Http\Discovery\UriFactoryDiscovery" method="find" />
39-
</service>
40-
<service id="Http\Message\UriFactory" alias="httplug.uri_factory" public="false" />
41-
4225
<service id="httplug.async_client.default" class="Http\Client\HttpAsyncClient">
4326
<factory class="Http\Discovery\HttpAsyncClientDiscovery" method="find" />
4427
</service>
@@ -80,23 +63,16 @@
8063
<!-- ClientFactories -->
8164
<service id="httplug.factory.auto" class="Http\HttplugBundle\ClientFactory\AutoDiscoveryFactory" public="false" />
8265
<service id="httplug.factory.buzz" class="Http\HttplugBundle\ClientFactory\BuzzFactory" public="false">
83-
<argument type="service" id="httplug.message_factory"/>
66+
<argument type="service" id="httplug.psr17_response_factory"/>
8467
</service>
8568
<service id="httplug.factory.curl" class="Http\HttplugBundle\ClientFactory\CurlFactory" public="false">
8669
<argument type="service" id="httplug.psr17_response_factory"/>
8770
<argument type="service" id="httplug.psr17_stream_factory"/>
8871
</service>
89-
<service id="httplug.factory.guzzle5" class="Http\HttplugBundle\ClientFactory\Guzzle5Factory" public="false">
90-
<argument type="service" id="httplug.message_factory"/>
91-
</service>
9272
<service id="httplug.factory.guzzle6" class="Http\HttplugBundle\ClientFactory\Guzzle6Factory" public="false" />
9373
<service id="httplug.factory.guzzle7" class="Http\HttplugBundle\ClientFactory\Guzzle7Factory" public="false" />
94-
<service id="httplug.factory.react" class="Http\HttplugBundle\ClientFactory\ReactFactory" public="false">
95-
<argument type="service" id="httplug.message_factory"/>
96-
</service>
97-
<service id="httplug.factory.socket" class="Http\HttplugBundle\ClientFactory\SocketFactory" public="false">
98-
<argument type="service" id="httplug.message_factory"/>
99-
</service>
74+
<service id="httplug.factory.react" class="Http\HttplugBundle\ClientFactory\ReactFactory" public="false" />
75+
<service id="httplug.factory.socket" class="Http\HttplugBundle\ClientFactory\SocketFactory" public="false" />
10076
<service id="httplug.factory.symfony" class="Http\HttplugBundle\ClientFactory\SymfonyFactory" public="false">
10177
<argument type="service" id="httplug.psr17_response_factory"/>
10278
<argument type="service" id="httplug.psr17_stream_factory"/>

tests/Functional/DiscoveredClientsTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Http\Discovery\HttpAsyncClientDiscovery;
1111
use Http\Discovery\HttpClientDiscovery;
1212
use Http\Discovery\Strategy\CommonClassesStrategy;
13+
use Http\Discovery\Strategy\CommonPsr17ClassesStrategy;
1314
use Http\HttplugBundle\Collector\ProfileClient;
1415
use Http\HttplugBundle\Discovery\ConfiguredClientsStrategyListener;
1516
use Nyholm\NSA;
@@ -131,7 +132,7 @@ protected function setUp(): void
131132

132133
// Reset values
133134
$strategy = new ConfiguredClientsStrategyListener(null, null);
134-
HttpClientDiscovery::setStrategies([CommonClassesStrategy::class]);
135+
HttpClientDiscovery::setStrategies([CommonClassesStrategy::class, CommonPsr17ClassesStrategy::class]);
135136
$strategy->onEvent();
136137
}
137138
}

0 commit comments

Comments
 (0)