Skip to content

Commit c339034

Browse files
committed
Allow to register PSR17 and PSR18 classes as services
1 parent 9a739ad commit c339034

File tree

7 files changed

+92
-3
lines changed

7 files changed

+92
-3
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@
4646
"php-http/curl-client": "<2.0"
4747
},
4848
"require-dev": {
49-
"guzzlehttp/psr7": "^1.0",
5049
"matthiasnoback/symfony-dependency-injection-test": "^4.0",
5150
"nyholm/nsa": "^1.1",
51+
"nyholm/psr7": "^1.2.1",
5252
"php-http/cache-plugin": "^1.7",
5353
"php-http/guzzle6-adapter": "^1.1.1 || ^2.0.1",
5454
"php-http/mock-client": "^1.2",

src/DependencyInjection/Configuration.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,19 +120,33 @@ public function getConfigTreeBuilder()
120120
->info('Configure which service the main alias point to.')
121121
->children()
122122
->scalarNode('client')->defaultValue('httplug.client.default')->end()
123+
->scalarNode('psr18_client')->defaultValue('httplug.psr18_client.default')->end()
123124
->scalarNode('message_factory')->defaultValue('httplug.message_factory.default')->end()
124125
->scalarNode('uri_factory')->defaultValue('httplug.uri_factory.default')->end()
125126
->scalarNode('stream_factory')->defaultValue('httplug.stream_factory.default')->end()
127+
->scalarNode('psr17_request_factory')->defaultValue('httplug.psr17_request_factory.default')->end()
128+
->scalarNode('psr17_response_factory')->defaultValue('httplug.psr17_response_factory.default')->end()
129+
->scalarNode('psr17_stream_factory')->defaultValue('httplug.psr17_stream_factory.default')->end()
130+
->scalarNode('psr17_uri_factory')->defaultValue('httplug.psr17_uri_factory.default')->end()
131+
->scalarNode('psr17_uploaded_file_factory')->defaultValue('httplug.psr17_uploaded_file_factory.default')->end()
132+
->scalarNode('psr17_server_request_factory')->defaultValue('httplug.psr17_server_request_factory.default')->end()
126133
->end()
127134
->end()
128135
->arrayNode('classes')
129136
->addDefaultsIfNotSet()
130137
->info('Overwrite a service class instead of using the discovery mechanism.')
131138
->children()
132139
->scalarNode('client')->defaultNull()->end()
140+
->scalarNode('psr18_client')->defaultNull()->end()
133141
->scalarNode('message_factory')->defaultNull()->end()
134142
->scalarNode('uri_factory')->defaultNull()->end()
135143
->scalarNode('stream_factory')->defaultNull()->end()
144+
->scalarNode('psr17_request_factory')->defaultNull()->end()
145+
->scalarNode('psr17_response_factory')->defaultNull()->end()
146+
->scalarNode('psr17_stream_factory')->defaultNull()->end()
147+
->scalarNode('psr17_uri_factory')->defaultNull()->end()
148+
->scalarNode('psr17_uploaded_file_factory')->defaultNull()->end()
149+
->scalarNode('psr17_server_request_factory')->defaultNull()->end()
136150
->end()
137151
->end()
138152
->arrayNode('profiling')

src/Resources/config/services.xml

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,31 @@
4646
</service>
4747
<service id="Http\Client\HttpClient" alias="httplug.client" public="false" />
4848

49+
<!-- Discovery for PSR-18 -->
50+
<service id="httplug.psr18_client.default" class="Psr\Http\Client\ClientInterface">
51+
<factory class="Http\Discovery\Psr18ClientDiscovery" method="find" />
52+
</service>
53+
54+
<!-- Discovery for PSR-17 -->
55+
<service id="httplug.psr17_request_factory.default" class="Psr\Http\Message\RequestFactoryInterface">
56+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findRequestFactory" />
57+
</service>
58+
<service id="httplug.psr17_response_factory.default" class="Psr\Http\Message\ResponseFactoryInterface">
59+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findResponseFactory" />
60+
</service>
61+
<service id="httplug.psr17_stream_factory.default" class="Psr\Http\Message\StreamFactoryInterface">
62+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findStreamFactory" />
63+
</service>
64+
<service id="httplug.psr17_uri_factory.default" class="Psr\Http\Message\UriFactoryInterface">
65+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findUrlFactory" />
66+
</service>
67+
<service id="httplug.psr17_uploaded_file_factory.default" class="Psr\Http\Message\UploadedFileFactoryInterface">
68+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findUploadedFileFactory" />
69+
</service>
70+
<service id="httplug.psr17_server_request_factory.default" class="Psr\Http\Message\ServerRequestFactoryInterface">
71+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findServerRequestFactory" />
72+
</service>
73+
4974
<!-- PluginClientFactory -->
5075
<service id="Http\Client\Common\PluginClientFactory" class="Http\Client\Common\PluginClientFactory" public="false" />
5176

@@ -55,8 +80,8 @@
5580
<argument type="service" id="httplug.message_factory"/>
5681
</service>
5782
<service id="httplug.factory.curl" class="Http\HttplugBundle\ClientFactory\CurlFactory" public="false">
58-
<argument type="service" id="httplug.message_factory"/>
59-
<argument type="service" id="httplug.stream_factory"/>
83+
<argument type="service" id="httplug.psr17_response_factory"/>
84+
<argument type="service" id="httplug.psr17_stream_factory"/>
6085
</service>
6186
<service id="httplug.factory.guzzle5" class="Http\HttplugBundle\ClientFactory\Guzzle5Factory" public="false">
6287
<argument type="service" id="httplug.message_factory"/>

tests/Resources/Fixtures/config/full.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
'message_factory' => 'Http\Message\MessageFactory\GuzzleMessageFactory',
1414
'uri_factory' => 'Http\Message\UriFactory\GuzzleUriFactory',
1515
'stream_factory' => 'Http\Message\StreamFactory\GuzzleStreamFactory',
16+
'psr18_client' => 'Http\Adapter\Guzzle6\Client',
17+
'psr17_request_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
18+
'psr17_response_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
19+
'psr17_stream_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
20+
'psr17_uri_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
21+
'psr17_uploaded_file_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
22+
'psr17_server_request_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
1623
],
1724
'clients' => [
1825
'test' => [

tests/Resources/Fixtures/config/full.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
<message-factory>Http\Message\MessageFactory\GuzzleMessageFactory</message-factory>
1515
<uri-factory>Http\Message\UriFactory\GuzzleUriFactory</uri-factory>
1616
<stream-factory>Http\Message\StreamFactory\GuzzleStreamFactory</stream-factory>
17+
<psr18-client>Http\Adapter\Guzzle6\Client</psr18-client>
18+
<psr17-request-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-request-factory>
19+
<psr17-response-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-response-factory>
20+
<psr17-stream-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-stream-factory>
21+
<psr17-uri-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-uri-factory>
22+
<psr17-uploaded-file-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-uploaded-file-factory>
23+
<psr17-server-request-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-server-request-factory>
1724
</classes>
1825
<client name="test" factory="httplug.factory.guzzle6" http-methods-client="true">
1926
<plugin>httplug.plugin.redirect</plugin>

tests/Resources/Fixtures/config/full.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ httplug:
1010
message_factory: Http\Message\MessageFactory\GuzzleMessageFactory
1111
uri_factory: Http\Message\UriFactory\GuzzleUriFactory
1212
stream_factory: Http\Message\StreamFactory\GuzzleStreamFactory
13+
psr18_client: Http\Adapter\Guzzle6\Client
14+
psr17_request_factory: Nyholm\Psr7\Factory\Psr17Factory
15+
psr17_response_factory: Nyholm\Psr7\Factory\Psr17Factory
16+
psr17_stream_factory: Nyholm\Psr7\Factory\Psr17Factory
17+
psr17_uri_factory: Nyholm\Psr7\Factory\Psr17Factory
18+
psr17_uploaded_file_factory: Nyholm\Psr7\Factory\Psr17Factory
19+
psr17_server_request_factory: Nyholm\Psr7\Factory\Psr17Factory
1320
clients:
1421
test:
1522
factory: httplug.factory.guzzle6

tests/Unit/DependencyInjection/ConfigurationTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Http\Message\MessageFactory\GuzzleMessageFactory;
1010
use Http\Message\UriFactory\GuzzleUriFactory;
1111
use Http\Message\StreamFactory\GuzzleStreamFactory;
12+
use Nyholm\Psr7\Factory\Psr17Factory;
1213
use Symfony\Component\Config\Definition\ConfigurationInterface;
1314
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
1415
use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;
@@ -25,12 +26,26 @@ class ConfigurationTest extends AbstractExtensionConfigurationTestCase
2526
'message_factory' => 'httplug.message_factory.default',
2627
'uri_factory' => 'httplug.uri_factory.default',
2728
'stream_factory' => 'httplug.stream_factory.default',
29+
'psr18_client' => 'httplug.psr18_client.default',
30+
'psr17_request_factory' => 'httplug.psr17_request_factory.default',
31+
'psr17_response_factory' => 'httplug.psr17_response_factory.default',
32+
'psr17_stream_factory' => 'httplug.psr17_stream_factory.default',
33+
'psr17_uri_factory' => 'httplug.psr17_uri_factory.default',
34+
'psr17_uploaded_file_factory' => 'httplug.psr17_uploaded_file_factory.default',
35+
'psr17_server_request_factory' => 'httplug.psr17_server_request_factory.default',
2836
],
2937
'classes' => [
3038
'client' => null,
39+
'psr18_client' => null,
3140
'message_factory' => null,
3241
'uri_factory' => null,
3342
'stream_factory' => null,
43+
'psr17_request_factory' => null,
44+
'psr17_response_factory' => null,
45+
'psr17_stream_factory' => null,
46+
'psr17_uri_factory' => null,
47+
'psr17_uploaded_file_factory' => null,
48+
'psr17_server_request_factory' => null,
3449
],
3550
'clients' => [],
3651
'profiling' => [
@@ -117,12 +132,26 @@ public function testSupportsAllConfigFormats(): void
117132
'message_factory' => 'my_message_factory',
118133
'uri_factory' => 'my_uri_factory',
119134
'stream_factory' => 'my_stream_factory',
135+
'psr18_client' => 'httplug.psr18_client.default',
136+
'psr17_request_factory' => 'httplug.psr17_request_factory.default',
137+
'psr17_response_factory' => 'httplug.psr17_response_factory.default',
138+
'psr17_stream_factory' => 'httplug.psr17_stream_factory.default',
139+
'psr17_uri_factory' => 'httplug.psr17_uri_factory.default',
140+
'psr17_uploaded_file_factory' => 'httplug.psr17_uploaded_file_factory.default',
141+
'psr17_server_request_factory' => 'httplug.psr17_server_request_factory.default',
120142
],
121143
'classes' => [
122144
'client' => Client::class,
123145
'message_factory' => GuzzleMessageFactory::class,
124146
'uri_factory' => GuzzleUriFactory::class,
125147
'stream_factory' => GuzzleStreamFactory::class,
148+
'psr18_client' => Client::class,
149+
'psr17_request_factory' => Psr17Factory::class,
150+
'psr17_response_factory' => Psr17Factory::class,
151+
'psr17_stream_factory' => Psr17Factory::class,
152+
'psr17_uri_factory' => Psr17Factory::class,
153+
'psr17_uploaded_file_factory' => Psr17Factory::class,
154+
'psr17_server_request_factory' => Psr17Factory::class,
126155
],
127156
'clients' => [
128157
'test' => [

0 commit comments

Comments
 (0)