Skip to content

Commit bbe830d

Browse files
authored
Merge pull request #314 from ruudk/disable_default_clients
Add configuration option to disable registration of default client
2 parents c88cc45 + 7fa5109 commit bbe830d

File tree

8 files changed

+54
-0
lines changed

8 files changed

+54
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ The change log describes what is "Added", "Removed", "Changed" or "Fixed" betwee
1010
BatchClientInterface if they are enabled on the default/first client.
1111
(Only available with Httplug 2)
1212
- Configuration for the content_type plugin
13+
- Configuration option default_client_autowiring that you can set to false
14+
to prevent autowiring the HttpClient and HttpAsyncClient
1315

1416
### Changed
1517

src/DependencyInjection/Configuration.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ public function getConfigTreeBuilder()
108108
->end()
109109
->fixXmlConfig('client')
110110
->children()
111+
->booleanNode('default_client_autowiring')
112+
->defaultTrue()
113+
->info('Set to false to not autowire HttpClient and HttpAsyncClient.')
114+
->end()
111115
->arrayNode('main_alias')
112116
->addDefaultsIfNotSet()
113117
->info('Configure which service the main alias point to.')

src/DependencyInjection/HttplugExtension.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Http\Client\Common\Plugin\AuthenticationPlugin;
1111
use Http\Client\Common\PluginClient;
1212
use Http\Client\Common\PluginClientFactory;
13+
use Http\Client\HttpAsyncClient;
1314
use Http\Client\HttpClient;
1415
use Http\Message\Authentication\BasicAuth;
1516
use Http\Message\Authentication\Bearer;
@@ -88,6 +89,11 @@ public function load(array $configs, ContainerBuilder $container)
8889
$this->configureClients($container, $config);
8990
$this->configurePlugins($container, $config['plugins']); // must be after clients, as clients.X.plugins might use plugins as templates that will be removed
9091
$this->configureAutoDiscoveryClients($container, $config);
92+
93+
if (!$config['default_client_autowiring']) {
94+
$container->removeAlias(HttpAsyncClient::class);
95+
$container->removeAlias(HttpClient::class);
96+
}
9197
}
9298

9399
/**

tests/Functional/DiscoveryTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
use Http\Message\StreamFactory;
1111
use Http\Message\UriFactory;
1212
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
13+
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\ContainerBuilderHasAliasConstraint;
14+
use PHPUnit\Framework\Constraint\LogicalNot;
1315
use Symfony\Component\DependencyInjection\Definition;
1416

1517
/**
@@ -71,4 +73,39 @@ public function testNoDiscoveryFallbacks()
7173
$clientDefinition = $this->container->getDefinition('httplug.client.default');
7274
$this->assertEquals([HttpClientDiscovery::class, 'find'], $clientDefinition->getFactory());
7375
}
76+
77+
public function testEnableAutowiring()
78+
{
79+
$this->load([
80+
'default_client_autowiring' => true,
81+
]);
82+
83+
$this->assertContainerBuilderHasService('httplug.client.default');
84+
$this->assertContainerBuilderHasService('httplug.async_client.default');
85+
$this->assertContainerBuilderHasAlias(HttpClient::class);
86+
$this->assertContainerBuilderHasAlias(HttpAsyncClient::class);
87+
}
88+
89+
public function testDisableAutowiring()
90+
{
91+
if (PHP_VERSION_ID <= 70000) {
92+
$this->markTestSkipped();
93+
}
94+
95+
$this->load([
96+
'default_client_autowiring' => false,
97+
]);
98+
99+
$this->assertContainerBuilderHasService('httplug.client.default');
100+
$this->assertContainerBuilderHasService('httplug.async_client.default');
101+
102+
self::assertThat(
103+
$this->container,
104+
new LogicalNot(new ContainerBuilderHasAliasConstraint(HttpClient::class))
105+
);
106+
self::assertThat(
107+
$this->container,
108+
new LogicalNot(new ContainerBuilderHasAliasConstraint(HttpAsyncClient::class))
109+
);
110+
}
74111
}

tests/Resources/Fixtures/config/full.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
$container->loadFromExtension('httplug', [
4+
'default_client_autowiring' => false,
45
'main_alias' => [
56
'client' => 'my_client',
67
'message_factory' => 'my_message_factory',

tests/Resources/Fixtures/config/full.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<container xmlns="http://symfony.com/schema/dic/services">
33

44
<config xmlns="http://example.org/schema/dic/httplug">
5+
<default-client-autowiring>false</default-client-autowiring>
56
<main-alias>
67
<client>my_client</client>
78
<message-factory>my_message_factory</message-factory>

tests/Resources/Fixtures/config/full.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
httplug:
2+
default_client_autowiring: false
23
main_alias:
34
client: my_client
45
message_factory: my_message_factory

tests/Unit/DependencyInjection/ConfigurationTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
class ConfigurationTest extends AbstractExtensionConfigurationTestCase
1313
{
1414
private $emptyConfig = [
15+
'default_client_autowiring' => true,
1516
'main_alias' => [
1617
'client' => 'httplug.client.default',
1718
'message_factory' => 'httplug.message_factory.default',
@@ -102,6 +103,7 @@ public function testEmptyConfiguration()
102103
public function testSupportsAllConfigFormats()
103104
{
104105
$expectedConfiguration = [
106+
'default_client_autowiring' => false,
105107
'main_alias' => [
106108
'client' => 'my_client',
107109
'message_factory' => 'my_message_factory',

0 commit comments

Comments
 (0)