Skip to content

Commit f21c17a

Browse files
authored
Merge pull request #3 from pamil/override-loader
Allow service container loader to be overridden
2 parents 57370ae + 0157885 commit f21c17a

File tree

3 files changed

+101
-7
lines changed

3 files changed

+101
-7
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the ServiceContainerExtension package.
5+
*
6+
* (c) FriendsOfBehat
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace FriendsOfBehat\ServiceContainerExtension\ServiceContainer;
13+
14+
use Symfony\Component\Config\FileLocator;
15+
use Symfony\Component\Config\Loader\DelegatingLoader;
16+
use Symfony\Component\Config\Loader\LoaderResolver;
17+
use Symfony\Component\DependencyInjection\ContainerBuilder;
18+
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
19+
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
20+
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
21+
22+
/**
23+
* @author Kamil Kokot <kamil.kokot@lakion.com>
24+
*/
25+
final class DefaultLoaderFactory implements LoaderFactory
26+
{
27+
/**
28+
* {@inheritdoc}
29+
*/
30+
public function createLoader(ContainerBuilder $container, array $config)
31+
{
32+
$fileLocator = new FileLocator($container->getParameter('paths.base'));
33+
34+
return new DelegatingLoader(new LoaderResolver([
35+
new XmlFileLoader($container, $fileLocator),
36+
new YamlFileLoader($container, $fileLocator),
37+
new PhpFileLoader($container, $fileLocator),
38+
]));
39+
}
40+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the ServiceContainerExtension package.
5+
*
6+
* (c) FriendsOfBehat
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace FriendsOfBehat\ServiceContainerExtension\ServiceContainer;
13+
14+
use Symfony\Component\Config\Loader\LoaderInterface;
15+
use Symfony\Component\DependencyInjection\ContainerBuilder;
16+
17+
/**
18+
* @author Kamil Kokot <kamil.kokot@lakion.com>
19+
*/
20+
interface LoaderFactory
21+
{
22+
/**
23+
* @param ContainerBuilder $container
24+
* @param array $config
25+
*
26+
* @return LoaderInterface
27+
*/
28+
public function createLoader(ContainerBuilder $container, array $config);
29+
}

src/ServiceContainer/ServiceContainerExtension.php

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1717
use Symfony\Component\Config\FileLocator;
1818
use Symfony\Component\Config\Loader\DelegatingLoader;
19+
use Symfony\Component\Config\Loader\LoaderInterface;
1920
use Symfony\Component\Config\Loader\LoaderResolver;
2021
use Symfony\Component\DependencyInjection\ContainerBuilder;
2122
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
@@ -28,6 +29,28 @@
2829
final class ServiceContainerExtension implements Extension
2930
{
3031
/**
32+
* @var LoaderFactory
33+
*/
34+
private $loaderFactory;
35+
36+
public function __construct()
37+
{
38+
$this->loaderFactory = new DefaultLoaderFactory();
39+
}
40+
41+
/**
42+
* @api
43+
*
44+
* @param LoaderFactory $loaderFactory
45+
*/
46+
public function setLoaderCallable(LoaderFactory $loaderFactory)
47+
{
48+
$this->loaderFactory = $loaderFactory;
49+
}
50+
51+
/**
52+
* @internal
53+
*
3154
* {@inheritdoc}
3255
*/
3356
public function getConfigKey()
@@ -36,6 +59,8 @@ public function getConfigKey()
3659
}
3760

3861
/**
62+
* @internal
63+
*
3964
* {@inheritdoc}
4065
*/
4166
public function initialize(ExtensionManager $extensionManager)
@@ -44,6 +69,8 @@ public function initialize(ExtensionManager $extensionManager)
4469
}
4570

4671
/**
72+
* @internal
73+
*
4774
* {@inheritdoc}
4875
*/
4976
public function configure(ArrayNodeDefinition $builder)
@@ -57,24 +84,22 @@ public function configure(ArrayNodeDefinition $builder)
5784
}
5885

5986
/**
87+
* @internal
88+
*
6089
* {@inheritdoc}
6190
*/
6291
public function load(ContainerBuilder $container, array $config)
6392
{
64-
$fileLocator = new FileLocator($container->getParameter('paths.base'));
65-
66-
$loader = new DelegatingLoader(new LoaderResolver([
67-
new XmlFileLoader($container, $fileLocator),
68-
new YamlFileLoader($container, $fileLocator),
69-
new PhpFileLoader($container, $fileLocator),
70-
]));
93+
$loader = $this->loaderFactory->createLoader($container, $config);
7194

7295
foreach ($config['imports'] as $file) {
7396
$loader->load($file);
7497
}
7598
}
7699

77100
/**
101+
* @internal
102+
*
78103
* {@inheritdoc}
79104
*/
80105
public function process(ContainerBuilder $container)

0 commit comments

Comments
 (0)