Skip to content

Commit 3f178ef

Browse files
committed
Require symfony/dependency-injection v4.2
1 parent df89e95 commit 3f178ef

File tree

8 files changed

+32
-140
lines changed

8 files changed

+32
-140
lines changed

README.md

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -115,28 +115,21 @@ many. For instance, if a service was an instance of `ArrayObject` the following
115115
Don't know which interface to choose from for ArrayObject: IteratorAggregate, Traversable, ArrayAccess, Serializable, Countable.
116116
```
117117

118-
We can help by decorating the basic interface resolver with a map, and specify which interface to implement for which
119-
class:
118+
We can specify which interface to implement using the `proxy` tag:
120119

121-
```php
122-
<?php
123-
124-
use olvlvl\SymfonyDependencyInjectionProxy\FactoryRenderer;
125-
use olvlvl\SymfonyDependencyInjectionProxy\InterfaceResolver\BasicInterfaceResolver;
126-
use olvlvl\SymfonyDependencyInjectionProxy\InterfaceResolver\MapInterfaceResolver;
127-
use olvlvl\SymfonyDependencyInjectionProxy\MethodRenderer;
128-
use olvlvl\SymfonyDependencyInjectionProxy\ProxyDumper;
129-
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
120+
```yaml
121+
ArrayObject:
122+
lazy: true
123+
tags:
124+
- { name: proxy, interface: ArrayAccess }
125+
```
130126
131-
/* @var PhpDumper $dumper */
127+
And since `symfony/dependency-injection` v4.2 we can specify the interface to implement using the `lazy` attribute:
132128

133-
$dumper->setProxyDumper(new ProxyDumper(
134-
new MapInterfaceResolver(new BasicInterfaceResolver(), [
135-
ArrayObject::class => ArrayAccess::class,
136-
]),
137-
new FactoryRenderer(new MethodRenderer)
138-
));
139-
```
129+
```yaml
130+
ArrayObject:
131+
lazy: ArrayAccess
132+
```
140133

141134

142135

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"require": {
1414
"php": ">=7.1",
1515
"ext-json": "*",
16-
"symfony/dependency-injection": "^4.1"
16+
"symfony/dependency-injection": "^4.2"
1717
},
1818
"autoload": {
1919
"psr-4": {

lib/InterfaceResolver/MapInterfaceResolver.php

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

lib/MethodRenderer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313

1414
use ReflectionMethod;
1515
use ReflectionParameter;
16+
use ReflectionType;
1617
use function implode;
1718
use function json_encode;
18-
use ReflectionType;
1919

2020
class MethodRenderer
2121
{

lib/ProxyDumper.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,11 @@
1212
namespace olvlvl\SymfonyDependencyInjectionProxy;
1313

1414
use InvalidArgumentException;
15-
use function method_exists;
16-
use function sprintf;
17-
use Symfony\Component\DependencyInjection\ContainerBuilder;
1815
use Symfony\Component\DependencyInjection\Definition;
1916
use Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\DumperInterface;
2017
use function class_exists;
2118
use function ltrim;
19+
use function sprintf;
2220

2321
final class ProxyDumper implements DumperInterface
2422
{
@@ -83,15 +81,27 @@ public function getProxyFactoryCode(Definition $definition, $id, $factoryCode)
8381
*/
8482
public function getProxyCode(Definition $definition)
8583
{
86-
return '// nothing to do';
84+
return '';
8785
}
8886

8987
/**
9088
* @throws \Exception
9189
*/
9290
private function findInterface(Definition $definition): string
9391
{
94-
return $this->interfaceResolver->resolveInterface($definition->getClass());
92+
return $this->resolveInterfaceFromTags($definition)
93+
?: $this->interfaceResolver->resolveInterface($definition->getClass());
94+
}
95+
96+
private function resolveInterfaceFromTags(Definition $definition): ?string
97+
{
98+
$proxy = $definition->getTag('proxy');
99+
100+
if (empty($proxy[0]['interface'])) {
101+
return null;
102+
}
103+
104+
return $proxy[0]['interface'];
95105
}
96106

97107
private function renderFactory(string $interface, string $factoryCode): string

tests/IntegrationTest.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
use olvlvl\SymfonyDependencyInjectionProxy\FactoryRenderer;
1515
use olvlvl\SymfonyDependencyInjectionProxy\InterfaceResolver\BasicInterfaceResolver;
16-
use olvlvl\SymfonyDependencyInjectionProxy\InterfaceResolver\MapInterfaceResolver;
1716
use olvlvl\SymfonyDependencyInjectionProxy\MethodRenderer;
1817
use olvlvl\SymfonyDependencyInjectionProxy\ProxyDumper;
1918
use PHPUnit\Framework\TestCase;
@@ -53,9 +52,7 @@ public function testCompilation(array $definitions, callable $assert, callable $
5352

5453
$dumper = new PhpDumper($builder);
5554
$dumper->setProxyDumper(new ProxyDumper(
56-
new MapInterfaceResolver(new BasicInterfaceResolver(), [
57-
Sample2::class => SampleInterface2::class,
58-
]),
55+
new BasicInterfaceResolver(),
5956
new FactoryRenderer(new MethodRenderer)
6057
));
6158

@@ -103,6 +100,7 @@ function (ContainerInterface $container) use ($id, $value) {
103100
->setPublic(true)
104101
->addArgument(uniqid())
105102
->addArgument($value2 = uniqid())
103+
->addTag('proxy', [ 'interface' => SampleInterface2::class ])
106104
],
107105
function (ContainerInterface $container) use ($id, $value2) {
108106
/* @var SampleInterface2 $service */

tests/InterfaceResolver/MapInterfaceResolverTest.php

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

tests/ProxyDumperTest.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ public function testGetProxyCode()
150150

151151
$proxyCode = $stu->getProxyCode(new Definition());
152152

153-
$this->assertNotEmpty($proxyCode);
154-
$this->assertGreaterThanOrEqual(2, count(explode(' ', $proxyCode)));
153+
$this->assertEmpty($proxyCode);
155154
}
156155
}

0 commit comments

Comments
 (0)