Skip to content

Commit 0157885

Browse files
committed
Replace typed callable with factory object
1 parent 8ea9da2 commit 0157885

File tree

3 files changed

+76
-18
lines changed

3 files changed

+76
-18
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: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,23 @@
2929
final class ServiceContainerExtension implements Extension
3030
{
3131
/**
32-
* @var callable<ContainerBuilder, array>:LoaderInterface
32+
* @var LoaderFactory
3333
*/
34-
private $loaderCallable;
34+
private $loaderFactory;
3535

3636
public function __construct()
3737
{
38-
$this->loaderCallable = function (ContainerBuilder $container, array $config) {
39-
$fileLocator = new FileLocator($container->getParameter('paths.base'));
40-
41-
return new DelegatingLoader(new LoaderResolver([
42-
new XmlFileLoader($container, $fileLocator),
43-
new YamlFileLoader($container, $fileLocator),
44-
new PhpFileLoader($container, $fileLocator),
45-
]));
46-
};
38+
$this->loaderFactory = new DefaultLoaderFactory();
4739
}
4840

4941
/**
5042
* @api
5143
*
52-
* @param callable<ContainerBuilder, array>:LoaderInterface $loaderCallable
44+
* @param LoaderFactory $loaderFactory
5345
*/
54-
public function setLoaderCallable(callable $loaderCallable)
46+
public function setLoaderCallable(LoaderFactory $loaderFactory)
5547
{
56-
$this->loaderCallable = $loaderCallable;
48+
$this->loaderFactory = $loaderFactory;
5749
}
5850

5951
/**
@@ -98,10 +90,7 @@ public function configure(ArrayNodeDefinition $builder)
9890
*/
9991
public function load(ContainerBuilder $container, array $config)
10092
{
101-
$loaderCallable = $this->loaderCallable;
102-
103-
/** @var LoaderInterface $loader */
104-
$loader = $loaderCallable($container, $config);
93+
$loader = $this->loaderFactory->createLoader($container, $config);
10594

10695
foreach ($config['imports'] as $file) {
10796
$loader->load($file);

0 commit comments

Comments
 (0)