Skip to content

Commit 6fa2861

Browse files
authored
Merge pull request #1394 from stof/fix_config
Fix support for decorating persister services
2 parents dc5e6bf + 670a23e commit 6fa2861

File tree

4 files changed

+25
-14
lines changed

4 files changed

+25
-14
lines changed

src/DependencyInjection/Compiler/RegisterPagerPersistersPass.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public function process(ContainerBuilder $container)
2929
$registry = $container->getDefinition('fos_elastica.pager_persister_registry');
3030

3131
$nameToServiceIdMap = [];
32-
foreach ($container->findTaggedServiceIds('fos_elastica.pager_persister') as $id => $attributes) {
32+
foreach ($container->findTaggedServiceIds('fos_elastica.pager_persister', true) as $id => $attributes) {
3333
foreach ($attributes as $attribute) {
3434
if (!isset($attribute['persisterName'])) {
3535
throw new \InvalidArgumentException(sprintf('Elastica pager persister "%s" must specify the "persisterName" attribute.', $id));
@@ -47,10 +47,14 @@ public function process(ContainerBuilder $container)
4747
}
4848

4949
$persisterDef = $container->getDefinition($id);
50-
if (!$persisterDef->getFactory()) {
50+
if (!$persisterDef->getFactory() && $persisterDef->getClass()) {
5151
// You are on your own if you use a factory to create a persister.
5252
// It would fail in runtime if the factory does not return a proper persister.
53-
$this->assertClassImplementsPagerPersisterInterface($id, $persisterDef->getClass());
53+
$this->assertClassImplementsPagerPersisterInterface($id, $container->getParameterBag()->resolveValue($persisterDef->getClass()));
54+
}
55+
56+
if (!$persisterDef->isPublic()) {
57+
throw new \InvalidArgumentException(sprintf('Elastica pager persister "%s" must be a public service', $id));
5458
}
5559

5660
$nameToServiceIdMap[$persisterName] = $id;
@@ -79,4 +83,4 @@ private function assertClassImplementsPagerPersisterInterface($persisterId, $per
7983
));
8084
}
8185
}
82-
}
86+
}

src/DependencyInjection/Compiler/RegisterPagerProvidersPass.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function process(ContainerBuilder $container)
3030
$registry = $container->getDefinition('fos_elastica.pager_provider_registry');
3131

3232
$registeredProviders = [];
33-
foreach ($container->findTaggedServiceIds('fos_elastica.pager_provider') as $id => $attributes) {
33+
foreach ($container->findTaggedServiceIds('fos_elastica.pager_provider', true) as $id => $attributes) {
3434
foreach ($attributes as $attribute) {
3535
if (!isset($attribute['type'])) {
3636
throw new \InvalidArgumentException(sprintf('Elastica provider "%s" must specify the "type" attribute.', $id));
@@ -50,10 +50,14 @@ public function process(ContainerBuilder $container)
5050
}
5151

5252
$providerDef = $container->getDefinition($id);
53-
if (!$providerDef->getFactory()) {
53+
if (!$providerDef->getFactory() && $providerDef->getClass()) {
5454
// You are on your own if you use a factory to create a provider.
5555
// It would fail in runtime if the factory does not return a proper provider.
56-
$this->assertClassImplementsPagerProviderInterface($id, $providerDef->getClass());
56+
$this->assertClassImplementsPagerProviderInterface($id, $container->getParameterBag()->resolveValue($providerDef->getClass()));
57+
}
58+
59+
if (!$providerDef->isPublic()) {
60+
throw new \InvalidArgumentException(sprintf('Elastica persister "%s" must be a public service', $id));
5761
}
5862

5963
$registeredProviders[$index][$type] = $id;

src/DependencyInjection/Compiler/RegisterPersistersPass.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function process(ContainerBuilder $container)
3030
$registry = $container->getDefinition('fos_elastica.persister_registry');
3131

3232
$registeredPersisters = [];
33-
foreach ($container->findTaggedServiceIds('fos_elastica.persister') as $id => $attributes) {
33+
foreach ($container->findTaggedServiceIds('fos_elastica.persister', true) as $id => $attributes) {
3434
foreach ($attributes as $attribute) {
3535
if (!isset($attribute['type'])) {
3636
throw new \InvalidArgumentException(sprintf('Elastica persister "%s" must specify the "type" attribute.', $id));
@@ -50,10 +50,14 @@ public function process(ContainerBuilder $container)
5050
}
5151

5252
$persisterDef = $container->getDefinition($id);
53-
if (!$persisterDef->getFactory()) {
53+
if (!$persisterDef->getFactory() && $persisterDef->getClass()) {
5454
// You are on your own if you use a factory to create a persister.
5555
// It would fail in runtime if the factory does not return a proper persister.
56-
$this->assertClassImplementsPersisterInterface($id, $persisterDef->getClass());
56+
$this->assertClassImplementsPersisterInterface($id, $container->getParameterBag()->resolveValue($persisterDef->getClass()));
57+
}
58+
59+
if (!$persisterDef->isPublic()) {
60+
throw new \InvalidArgumentException(sprintf('Elastica persister "%s" must be a public service', $id));
5761
}
5862

5963
$registeredPersisters[$index][$type] = $id;
@@ -82,4 +86,4 @@ private function assertClassImplementsPersisterInterface($persisterId, $persiste
8286
));
8387
}
8488
}
85-
}
89+
}

src/FOSElasticaBundle.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
use Symfony\Component\DependencyInjection\ContainerBuilder;
1919
use FOS\ElasticaBundle\DependencyInjection\Compiler\RegisterPagerProvidersPass;
2020
use FOS\ElasticaBundle\DependencyInjection\Compiler\RegisterPersistersPass;
21-
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
2221
use Symfony\Component\HttpKernel\Bundle\Bundle;
2322

2423
class FOSElasticaBundle extends Bundle
@@ -32,8 +31,8 @@ public function build(ContainerBuilder $container)
3231

3332
$container->addCompilerPass(new ConfigSourcePass());
3433
$container->addCompilerPass(new IndexPass());
35-
$container->addCompilerPass(new RegisterPagerProvidersPass(), PassConfig::TYPE_BEFORE_REMOVING);
36-
$container->addCompilerPass(new RegisterPersistersPass(), PassConfig::TYPE_BEFORE_REMOVING);
34+
$container->addCompilerPass(new RegisterPagerProvidersPass());
35+
$container->addCompilerPass(new RegisterPersistersPass());
3736
$container->addCompilerPass(new RegisterPagerPersistersPass());
3837
$container->addCompilerPass(new TransformerPass());
3938
}

0 commit comments

Comments
 (0)